Merge remote-tracking branch 'upstream/sdk-1.3.231' into main

Bug: 112606
Change-Id: Icbf28c5b65557e9087e32c85b2b5a4aa55ab484e
diff --git a/.appveyor.yml b/.appveyor.yml
index bf8c572..b08c47b 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -98,7 +98,7 @@
     auth_token:
       secure: YglcSYdl0TylEa59H4K6lylBEDr586NAt2EMgZquSo+iuPrwgZQuJLPCoihSm9y6
     release: master-tot
-    description: "Continuous build of the latest master branch by Appveyor and Travis CI"
+    description: "Continuous build of the latest master branch by Appveyor and Github"
     artifact: artifacts-zip
     draft: false
     prerelease: false
diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml
new file mode 100644
index 0000000..c375ac4
--- /dev/null
+++ b/.github/workflows/continuous_deployment.yml
@@ -0,0 +1,170 @@
+# 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
+# GitHub REST API: https://docs.github.com/en/rest
+# Octokit front-end to the GitHub REST API: https://octokit.github.io/rest.js/v18
+# Octokit endpoint methods: https://github.com/octokit/plugin-rest-endpoint-methods.js/tree/master/docs/repos
+
+# TODO: Use actions/upload-artifact and actions/download-artifact to simplify deployment.
+# TODO: Use composite actions to refactor redundant code.
+
+name: Continuous Deployment
+
+on:
+    workflow_dispatch:
+    push:
+        branches:
+            - master
+
+jobs:
+    linux:
+        runs-on: ${{matrix.os.genus}}
+        strategy:
+            fail-fast: false
+            matrix:
+                os: [{genus: ubuntu-20.04, family: linux}]
+                compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
+                cmake_build_type: [Debug, Release]
+        steps:
+            - uses: actions/checkout@v2
+            - uses: actions/setup-python@v2
+              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
+            - name: Build
+              env:
+                  CC: ${{matrix.compiler.cc}}
+                  CXX: ${{matrix.compiler.cxx}}
+              run: |
+                  mkdir build && cd build
+                  cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install ..
+                  make -j4 install
+            - name: Test
+              run: |
+                  cd build
+                  ctest --output-on-failure &&
+                  cd ../Test && ./runtests
+            - name: Zip
+              if: ${{ matrix.compiler.cc == 'clang' }}
+              env:
+                  ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
+              run: |
+                  cd build/install
+                  zip ${ARCHIVE} \
+                      bin/glslangValidator \
+                      include/glslang/* \
+                      include/glslang/**/* \
+                      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 \
+                      lib/libSPIRV-Tools.a \
+                      lib/libSPIRV-Tools-opt.a
+            - name: Deploy
+              if: ${{ matrix.compiler.cc == 'clang' }}
+              env:
+                  ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
+              uses: actions/github-script@v5
+              with:
+                  script: |
+                      const script = require('.github/workflows/deploy.js')
+                      await script({github, context, core})
+
+    macos:
+        runs-on: ${{matrix.os.genus}}
+        strategy:
+            fail-fast: false
+            matrix:
+                os: [{genus: macos-11, family: osx}]
+                compiler: [{cc: clang, cxx: clang++}]
+                cmake_build_type: [Debug, Release]
+        steps:
+            - uses: actions/checkout@v2
+            - uses: actions/setup-python@v2
+              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
+            - name: Build
+              env:
+                  CC: ${{matrix.compiler.cc}}
+                  CXX: ${{matrix.compiler.cxx}}
+              run: |
+                  mkdir build && cd build
+                  cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install ..
+                  make -j4 install
+            - name: Test
+              run: |
+                  cd build
+                  ctest --output-on-failure &&
+                  cd ../Test && ./runtests
+            - name: Zip
+              env:
+                  ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
+              run: |
+                  cd build/install
+                  zip ${ARCHIVE} \
+                      bin/glslangValidator \
+                      include/glslang/* \
+                      include/glslang/**/* \
+                      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 \
+                      lib/libSPIRV-Tools.a \
+                      lib/libSPIRV-Tools-opt.a
+            - name: Deploy
+              env:
+                  ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
+              uses: actions/github-script@v5
+              with:
+                  script: |
+                      const script = require('.github/workflows/deploy.js')
+                      await script({github, context, core})
diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml
new file mode 100644
index 0000000..7c36c68
--- /dev/null
+++ b/.github/workflows/continuous_integration.yml
@@ -0,0 +1,157 @@
+# 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:
+            - master
+
+jobs:
+    linux:
+        runs-on: ${{matrix.os}}
+        strategy:
+            fail-fast: false
+            matrix:
+                os: [ubuntu-20.04]
+                compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
+                cmake_build_type: [Debug, Release]
+        steps:
+            - uses: actions/checkout@v2
+            - uses: actions/setup-python@v2
+              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
+            - name: Build
+              env:
+                  CC: ${{matrix.compiler.cc}}
+                  CXX: ${{matrix.compiler.cxx}}
+              run: |
+                  mkdir build && cd build
+                  cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install ..
+                  make -j4 install
+            - name: Test
+              run: |
+                  cd build
+                  ctest --output-on-failure &&
+                  cd ../Test && ./runtests
+
+    macos:
+        runs-on: ${{matrix.os}}
+        strategy:
+            fail-fast: false
+            matrix:
+                os: [macos-11]
+                compiler: [{cc: clang, cxx: clang++}]
+                cmake_build_type: [Debug, Release]
+        steps:
+            - uses: actions/checkout@v2
+            - uses: actions/setup-python@v2
+              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
+            - name: Build
+              env:
+                  CC: ${{matrix.compiler.cc}}
+                  CXX: ${{matrix.compiler.cxx}}
+              run: |
+                  mkdir build && cd build
+                  cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install ..
+                  make -j4 install
+            - name: Test
+              run: |
+                  cd build
+                  ctest --output-on-failure &&
+                  cd ../Test && ./runtests
+
+    android:
+        runs-on: ${{matrix.os}}
+        strategy:
+            fail-fast: false
+            matrix:
+                os: [ubuntu-20.04]
+                compiler: [{cc: clang, cxx: clang++}]
+                cmake_build_type: [Release]
+        steps:
+            - uses: actions/checkout@v2
+            - uses: actions/setup-python@v2
+              with:
+                  python-version: '3.7'
+            - name: Install Ubuntu Package Dependencies
+              if: ${{matrix.os == 'ubuntu-20.04'}}
+              run: |
+                  sudo apt-get -qq update
+                  sudo apt-get install -y clang-6.0
+            - name: Install Android NDK
+              run: |
+                  export ANDROID_NDK=$HOME/android-ndk
+                  git init $ANDROID_NDK
+                  pushd $ANDROID_NDK
+                  git remote add dneto0 https://github.com/dneto0/android-ndk.git
+                  git fetch --depth=1 dneto0 r17b-strip
+                  git checkout FETCH_HEAD
+                  popd
+            - 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: Build
+              env:
+                  CC: ${{matrix.compiler.cc}}
+                  CXX: ${{matrix.compiler.cxx}}
+              run: |
+                  export ANDROID_NDK=$HOME/android-ndk
+                  export TOOLCHAIN_PATH=$ANDROID_NDK/build/cmake/android.toolchain.cmake
+                  echo $ANDROID_NDK
+                  echo $TOOLCHAIN_PATH
+                  mkdir build && cd build
+                  cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_PATH} -DANDROID_NATIVE_API_LEVEL=android-14 -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DANDROID_ABI="armeabi-v7a with NEON" -DBUILD_TESTING=OFF ..
+                  make -j4
diff --git a/.github/workflows/deploy.js b/.github/workflows/deploy.js
new file mode 100644
index 0000000..9f8d242
--- /dev/null
+++ b/.github/workflows/deploy.js
@@ -0,0 +1,73 @@
+module.exports = async ({github, context, core}) => {
+    try {
+        await github.rest.git.updateRef({
+            owner: context.repo.owner,
+            repo: context.repo.repo,
+            ref: 'tags/master-tot',
+            sha: context.sha
+        })
+    } catch (error) {
+        core.setFailed(`upload master-tot tag; ${error.name}; ${error.message}`)
+    }
+
+    let release
+    try {
+        release = await github.rest.repos.getReleaseByTag({
+            owner: context.repo.owner,
+            repo: context.repo.repo,
+            tag: 'master-tot'
+        })
+    } catch (error) {
+        core.setFailed(`get the master release; ${error.name}; ${error.message}`)
+    }
+
+    try {
+        await github.rest.repos.updateRelease({
+            owner: context.repo.owner,
+            repo: context.repo.repo,
+            release_id: release.data.id
+        })
+    } catch (error) {
+        core.setFailed(`update the master release; ${error.name}; ${error.message}`)
+    }
+
+    let release_assets
+    try {
+        release_assets = await github.rest.repos.listReleaseAssets({
+            owner: context.repo.owner,
+            repo: context.repo.repo,
+            release_id: release.data.id
+        })
+    } catch (error) {
+        core.setFailed(`list release assets; ${error.name}; ${error.message}`)
+    }
+
+    const { ARCHIVE } = process.env
+    for (const release_asset of release_assets.data) {
+        if (release_asset.name === `${ ARCHIVE }`) {
+            try {
+                await github.rest.repos.deleteReleaseAsset({
+                    owner: context.repo.owner,
+                    repo: context.repo.repo,
+                    asset_id: release_asset.id
+                })
+            } catch (error) {
+                core.setFailed(`delete ${ ARCHIVE }; ${error.name}; ${error.message}`)
+            }
+        }
+    }
+
+    try {
+        const asset_path = `./build/install/${ ARCHIVE }`
+        const fs = require("fs")
+        await github.rest.repos.uploadReleaseAsset({
+            owner: context.repo.owner,
+            repo: context.repo.repo,
+            release_id: release.data.id,
+            name: `${ ARCHIVE }`,
+            data: fs.readFileSync(asset_path)
+        })
+    } catch (error) {
+        core.setFailed(`upload ${ ARCHIVE }; ${error.name}; ${error.message}`)
+    }
+}
diff --git a/.gitignore b/.gitignore
index ab25cec..333fb76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,7 @@
 third_party/
 buildtools/
 tools/
+
+# Random OS stuff
+.DS_Store
+._*
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index cb0392e..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,141 +0,0 @@
-# Linux and Mac Build Configuration for Travis
-
-language: cpp
-
-os:
-  - linux
-  - osx
-
-# Use Ubuntu 14.04 LTS (Trusty) as the Linux testing environment.
-sudo: false
-dist: trusty
-
-env:
-  global:
-    - secure: aGFrgzyKp+84hKrGkxVWg8cHV61uqrKEHT38gfSQK6+WS4GfLOyH83p7WnsEBb7AMhzU7LMNFdvOFr6+NaMpVnqRvc40CEG1Q+lNg9Pq9mhIZLowvDrfqTL9kQ+8Nbw5Q6/dg6CTvY7fvRfpfCEmKIUZBRkoKUuHeuM1uy3IupFcdNuL5bSYn3Beo+apSJginh9DI4BLDXFUgBzTRSLLyCX5g3cpaeGGOCr8quJlYx75W6HRck5g9SZuLtUoH9GFEV3l+ZEWB8noErW+J56L03bwNwFuuAh321evw++oQk5KFa8rlDvar3SJ3b1RHB8u/eq5DBYMyaK/fS8+Q7QbGr8diF/wDe68bKO7U9IhpNfExXmczCpExjHomW5TQv4rYdGhygPMfW97aIsPRYyNKcl4fkmb7NDrM8w0Jscdq2g5c2Kz0ItyZoBri/NXLwFQQjaVCs7Pf97TjuMA7mK0GJmDTRzi6SrDYlWMt5BQL3y0CCojyfLIRcTh0CQjQI29s97bLfQrYAxt9GNNFR+HTXRLLrkaAlJkPGEPwUywlSfEThnvHLesNxYqemolAYpQT4ithoL4GehGIHmaxsW295aKVhuRf8K9eBODNqrfblvM42UHhjntT+92ZnQ/Gkq80GqaMxnxi4PO5FyPIxt0r981b54YBkWi8YA4P7w5pNI=
-  matrix:
-    - GLSLANG_BUILD_TYPE=Release
-    - GLSLANG_BUILD_TYPE=Debug
-
-compiler:
-  - clang
-  - gcc
-
-matrix:
-  fast_finish: true # Show final status immediately if a test fails.
-  exclude:
-    # Skip GCC builds on Mac OS X.
-    - os: osx
-      compiler: gcc
-  include:
-    # Additional build using Android NDK.
-    - env: BUILD_NDK=ON
-
-cache:
-  apt: true
-
-branches:
-  only:
-    - master
-
-addons:
-  apt:
-    packages:
-      - clang-3.6
-
-install:
-  # Make sure that clang-3.6 is selected on Linux.
-  - if [[ "$TRAVIS_OS_NAME" == "linux" && "$CC" == "clang" ]]; then
-      export CC=clang-3.6 CXX=clang++-3.6;
-    fi
-  # Download a recent Android NDK and use its android.toolchain.cmake file.
-  - if [[ "$BUILD_NDK" == "ON" ]]; then
-      export ANDROID_NDK=$HOME/android-ndk;
-      git init $ANDROID_NDK;
-      pushd $ANDROID_NDK;
-        git remote add dneto0 https://github.com/dneto0/android-ndk.git;
-        git fetch --depth=1 dneto0 r17b-strip;
-        git checkout FETCH_HEAD;
-      popd;
-      export TOOLCHAIN_PATH=$ANDROID_NDK/build/cmake/android.toolchain.cmake;
-    fi
-
-before_script:
-  # 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 ../..
-  # get spirv-tools and spirv-headers
-  - ./update_glslang_sources.py
-
-script:
-  - mkdir build && cd build
-  # For Android, do release building using NDK without testing.
-  # Use android-14, the oldest native API level supporeted by NDK r17b.
-  # We can use newer API levels if we want.
-  # For Linux and macOS, do debug/release building with testing.
-  - if [[ "$BUILD_NDK" == "ON" ]]; then
-      cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_PATH}
-            -DANDROID_NATIVE_API_LEVEL=android-14
-            -DCMAKE_BUILD_TYPE=Release
-            -DANDROID_ABI="armeabi-v7a with NEON"
-            -DBUILD_TESTING=OFF ..;
-      make -j4;
-    else
-      cmake -DCMAKE_BUILD_TYPE=${GLSLANG_BUILD_TYPE}
-            -DCMAKE_INSTALL_PREFIX=`pwd`/install ..;
-      make -j4 install;
-      ctest --output-on-failure &&
-      cd ../Test && ./runtests;
-    fi
-
-after_success:
-  # For debug build, the generated dll has a postfix "d" in its name.
-  - if [[ "${GLSLANG_BUILD_TYPE}" == "Debug" ]]; then
-      export SUFFIX="d";
-    else
-      export SUFFIX="";
-    fi
-  # Create tarball for deployment
-  - if [[ ${CC} == clang* && "${BUILD_NDK}" != "ON" ]]; then
-      cd ../build/install;
-      export TARBALL=glslang-master-${TRAVIS_OS_NAME}-${GLSLANG_BUILD_TYPE}.zip;
-      zip ${TARBALL}
-        bin/glslangValidator
-        include/glslang/*
-        lib/libGenericCodeGen${SUFFIX}.a
-        lib/libglslang${SUFFIX}.a
-        lib/libglslang-default-resource-limits${SUFFIX}.a
-        lib/libHLSL${SUFFIX}.a
-        lib/libMachineIndependent${SUFFIX}.a
-        lib/libOGLCompiler${SUFFIX}.a
-        lib/libOSDependent${SUFFIX}.a
-        lib/libSPIRV${SUFFIX}.a
-        lib/libSPVRemapper${SUFFIX}.a
-        lib/libSPIRV-Tools${SUFFIX}.a
-        lib/libSPIRV-Tools-opt${SUFFIX}.a;
-    fi
-
-before_deploy:
-  # Tag the current top of the tree as "master-tot".
-  # Travis CI replies on the tag name to properly push to GitHub Releases.
-  - git config --global user.name "Travis CI"
-  - git config --global user.email "builds@travis-ci.org"
-  - git tag -f master-tot
-  - git push -q -f https://${glslangtoken}@github.com/KhronosGroup/glslang --tags
-
-deploy:
-  provider: releases
-  api_key: ${glslangtoken}
-  on:
-    branch: master
-    condition: ${CC} == clang* && ${BUILD_NDK} != ON
-  file: ${TARBALL}
-  skip_cleanup: true
-  overwrite: true
diff --git a/Android.mk b/Android.mk
index c9b221f..40cddb7 100644
--- a/Android.mk
+++ b/Android.mk
@@ -96,6 +96,7 @@
 LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES)
 LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)
 LOCAL_SRC_FILES:= \
+		glslang/CInterface/glslang_c_interface.cpp \
 		glslang/GenericCodeGen/CodeGen.cpp \
 		glslang/GenericCodeGen/Link.cpp \
 		glslang/HLSL/hlslAttributes.cpp \
@@ -149,6 +150,7 @@
 LOCAL_MODULE:=SPIRV
 LOCAL_CXXFLAGS:=-std=c++11 -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 \
diff --git a/BUILD.bazel b/BUILD.bazel
index 1115b7d..12168fa 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -146,6 +146,7 @@
         "SPIRV/GLSL.ext.NV.h",
         "SPIRV/GLSL.std.450.h",
         "SPIRV/NonSemanticDebugPrintf.h",
+        "SPIRV/NonSemanticShaderDebugInfo100.h",
         "SPIRV/spirv.hpp",
     ],
     outs = [
@@ -155,6 +156,7 @@
         "include/SPIRV/GLSL.ext.NV.h",
         "include/SPIRV/GLSL.std.450.h",
         "include/SPIRV/NonSemanticDebugPrintf.h",
+        "include/SPIRV/NonSemanticShaderDebugInfo100.h",
         "include/SPIRV/spirv.hpp",
     ],
     cmd_bash = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/",
diff --git a/BUILD.gn b/BUILD.gn
index 70e1068..928fad6 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -136,6 +136,7 @@
       "SPIRV/Logger.cpp",
       "SPIRV/Logger.h",
       "SPIRV/NonSemanticDebugPrintf.h",
+      "SPIRV/NonSemanticShaderDebugInfo100.h",
       "SPIRV/SPVRemapper.cpp",
       "SPIRV/SPVRemapper.h",
       "SPIRV/SpvBuilder.cpp",
diff --git a/CHANGES.md b/CHANGES.md
index ebab4da..e7b6f14 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -3,6 +3,47 @@
 All notable changes to this project will be documented in this file.
 This project adheres to [Semantic Versioning](https://semver.org/).
 
+## 11.12.0 2022-10-12
+
+### Other changes
+* Update generator version
+* Add support for GL_EXT_mesh_shader
+* Add support for NonSemantic.Shader.DebugInfo.100
+* Make OpEmitMeshTasksEXT a terminal instruction
+* Make gl_SubGroupARB a flat in int in Vulkan
+* Add support for GL_EXT_opacity_micromap
+* Add preamble support to C interface
+
+## 11.11.0 2022-08-11
+
+### Other changes
+* Add OpSource support to C interface
+* Deprecate samplerBuffer for spirv1.6 and later
+* Add support for SPV_AMD_shader_early_and_late_fragment_tests
+
+## 11.10.0 2022-06-02
+
+### Other changes
+* Generate OpLine before OpFunction
+* Add support for VK_EXT_fragment_shader_barycentric
+* Add whitelist filtering for debug comments in SPIRV-Remap
+* Add support for GL_EXT_ray_cull_mask
+
+## 11.9.0 2022-04-06
+
+### Other changes
+* Add GLSL version override functionality
+* Add eliminate-dead-input-components to -Os
+* Add enhanced-msgs option
+* Explicitly use Python 3 for builds
+
+## 11.8.0 2022-01-27
+
+### Other changes
+* Add support for SPIR-V 1.6
+* Add support for Vulkan 1.3
+* Add --hlsl-dx-position-w option
+
 ## 11.7.0 2021-11-11
 
 ### Other changes
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d5b727a..b581c84 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,7 +33,7 @@
 
 # increase to 3.1 once all major distributions
 # include a version of CMake >= 3.1
-cmake_minimum_required(VERSION 2.8.12)
+cmake_minimum_required(VERSION 3.14.0)
 if (POLICY CMP0048)
   cmake_policy(SET CMP0048 NEW)
 endif()
@@ -50,6 +50,7 @@
 
 # Adhere to GNU filesystem layout conventions
 include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
 
 # Needed for CMAKE_DEPENDENT_OPTION macro
 include(CMakeDependentOption)
@@ -106,10 +107,17 @@
 option(ENABLE_RTTI "Enables RTTI" OFF)
 option(ENABLE_EXCEPTIONS "Enables Exceptions" OFF)
 option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
-option(ENABLE_PCH "Enables Precompiled header" ON)
+
+if(MINGW OR (CMAKE_SYSTEM_NAME STREQUAL "Darwin" 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)
+endif()
 option(ENABLE_CTEST "Enables testing" ON)
 
-if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
+if(ENABLE_GLSLANG_INSTALL AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
     set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
 endif()
 
@@ -163,7 +171,7 @@
         add_compile_options(-Werror=deprecated-copy)
     endif()
 
-    if(NOT CMAKE_VERSION VERSION_LESS "3.13")
+    if(NOT CMAKE_VERSION VERSION_LESS "3.13" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
         # Error if there's symbols that are not found at link time.
         # add_link_options() was added in CMake 3.13 - if using an earlier
         # version don't set this - it should be caught by presubmits anyway.
@@ -184,7 +192,11 @@
         # Error if there's symbols that are not found at link time.
         # add_link_options() was added in CMake 3.13 - if using an earlier
         # version don't set this - it should be caught by presubmits anyway.
-        add_link_options("-Wl,-undefined,error")
+        if (WIN32)
+            add_link_options("-Wl,--no-undefined")
+        else()
+            add_link_options("-Wl,-undefined,error")
+        endif()
     endif()
 elseif(MSVC)
     if(NOT ENABLE_RTTI)
@@ -356,3 +368,38 @@
         COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH}
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)
 endif()
+
+if(ENABLE_GLSLANG_INSTALL)
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in" [=[
+        @PACKAGE_INIT@
+        include("@PACKAGE_PATH_EXPORT_TARGETS@")
+    ]=])
+    
+    set(PATH_EXPORT_TARGETS "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake")
+    configure_package_config_file(
+        "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in"
+        "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake"
+        PATH_VARS
+            PATH_EXPORT_TARGETS
+        INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
+    )
+    
+    write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glslang-config-version.cmake"
+        VERSION ${GLSLANG_VERSION}
+        COMPATIBILITY SameMajorVersion
+    )
+    
+    install(
+        EXPORT      glslang-targets
+        NAMESPACE   "glslang::"
+        DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
+    )
+    
+    install(
+        FILES
+            "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake"
+            "${CMAKE_CURRENT_BINARY_DIR}/glslang-config-version.cmake"
+        DESTINATION
+            "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
+    )
+endif()
\ No newline at end of file
diff --git a/LICENSE.txt b/LICENSE.txt
index 5f58565..054e68a 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -303,41 +303,647 @@
 GPL 3 with special bison exception
 --------------------------------------------------------------------------------
 
-   Bison implementation for Yacc-like parsers in C
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
 
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
 
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
+                            Preamble
 
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
 
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
 
-   As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
 
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+Bison Exception
+
+As a special exception, you may create a larger work that contains part or all
+of the Bison parser skeleton and distribute that work under terms of your
+choice, so long as that work isn't itself a parser generator using the skeleton
+or a modified version thereof as a parser skeleton.  Alternatively, if you
+modify or redistribute the parser skeleton itself, you may (at your option)
+remove this special exception, which will cause the skeleton and the resulting
+Bison output files to be licensed under the GNU General Public License without
+this special exception.
+
+This special exception was added by the Free Software Foundation in version
+2.2 of Bison.
+
+                     END OF TERMS AND CONDITIONS
 
 --------------------------------------------------------------------------------
 ================================================================================
 --------------------------------------------------------------------------------
 
-The preprocessor has the core licenses stated above, plus an additional licence:
+The preprocessor has the core licenses stated above, plus additional licences:
 
 /****************************************************************************\
 Copyright (c) 2002, NVIDIA Corporation.
@@ -382,3 +988,29 @@
 TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
 NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 \****************************************************************************/
+
+/*
+** Copyright (c) 2014-2016 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a copy
+** of this software and/or associated documentation files (the "Materials"),
+** to deal in the Materials without restriction, including without limitation
+** the rights to use, copy, modify, merge, publish, distribute, sublicense,
+** and/or sell copies of the Materials, and to permit persons to whom the
+** Materials are furnished to do so, subject to the following conditions:
+**
+** The above copyright notice and this permission notice shall be included in
+** all copies or substantial portions of the Materials.
+**
+** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
+** IN THE MATERIALS.
+*/
diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt
index 0b007d4..b44cbc7 100644
--- a/OGLCompilersDLL/CMakeLists.txt
+++ b/OGLCompilersDLL/CMakeLists.txt
@@ -41,8 +41,19 @@
     source_group("Source" FILES ${SOURCES})
 endif(WIN32)
 
-if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OGLCompiler EXPORT OGLCompilerTargets
-            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-	install(EXPORT OGLCompilerTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
-endif(ENABLE_GLSLANG_INSTALL)
+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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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/README.md b/README.md
index 9b8cfb3..5e642e6 100644
--- a/README.md
+++ b/README.md
@@ -19,8 +19,8 @@
 
 If people are only using this location to get spirv.hpp, I recommend they get that from [SPIRV-Headers](https://github.com/KhronosGroup/SPIRV-Headers) instead.
 
-[![Build Status](https://travis-ci.org/KhronosGroup/glslang.svg?branch=master)](https://travis-ci.org/KhronosGroup/glslang)
-[![Build status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master)
+[![appveyor status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master)
+![Continuous Deployment](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_deployment.yml/badge.svg)
 
 # Glslang Components and Status
 
@@ -85,7 +85,15 @@
 * `.frag` for a fragment shader
 * `.comp` for a compute shader
 
-There is also a non-shader extension
+For ray tracing pipeline shaders:
+* `.rgen` for a ray generation shader
+* `.rint` for a ray intersection shader
+* `.rahit` for a ray any-hit shader
+* `.rchit` for a ray closest-hit shader
+* `.rmiss` for a ray miss shader
+* `.rcall` for a callable shader
+
+There is also a non-shader extension:
 * `.conf` for a configuration file of limits, see usage statement for example
 
 ## Building (CMake)
@@ -161,8 +169,8 @@
 
 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_ROOT/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake
-# If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_ROOT%\prebuilt\windows-x86_64\bin\make.exe
+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
+# 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
 ```
@@ -421,6 +429,77 @@
 In practice, `ShCompile()` takes shader strings, default version, and
 warning/error and other options for controlling compilation.
 
+### C Functional Interface (new)
+
+This interface is located `glslang_c_interface.h` and exposes functionality similar to the C++ interface. The following snippet is a complete example showing how to compile GLSL into SPIR-V 1.5 for Vulkan 1.2.
+
+```cxx
+std::vector<uint32_t> compileShaderToSPIRV_Vulkan(glslang_stage_t stage, const char* shaderSource, const char* fileName)
+{
+    const glslang_input_t input = {
+        .language = GLSLANG_SOURCE_GLSL,
+        .stage = stage,
+        .client = GLSLANG_CLIENT_VULKAN,
+        .client_version = GLSLANG_TARGET_VULKAN_1_2,
+        .target_language = GLSLANG_TARGET_SPV,
+        .target_language_version = GLSLANG_TARGET_SPV_1_5,
+        .code = shaderSource,
+        .default_version = 100,
+        .default_profile = GLSLANG_NO_PROFILE,
+        .force_default_version_and_profile = false,
+        .forward_compatible = false,
+        .messages = GLSLANG_MSG_DEFAULT_BIT,
+        .resource = reinterpret_cast<const glslang_resource_t*>(&glslang::DefaultTBuiltInResource),
+    };
+
+    glslang_shader_t* shader = glslang_shader_create(&input);
+
+    if (!glslang_shader_preprocess(shader, &input))	{
+        printf("GLSL preprocessing failed %s\n", fileName);
+        printf("%s\n", glslang_shader_get_info_log(shader));
+        printf("%s\n", glslang_shader_get_info_debug_log(shader));
+        printf("%s\n", input.code);
+        glslang_shader_delete(shader);
+        return std::vector<uint32_t>();
+    }
+
+    if (!glslang_shader_parse(shader, &input)) {
+        printf("GLSL parsing failed %s\n", fileName);
+        printf("%s\n", glslang_shader_get_info_log(shader));
+        printf("%s\n", glslang_shader_get_info_debug_log(shader));
+        printf("%s\n", glslang_shader_get_preprocessed_code(shader));
+        glslang_shader_delete(shader);
+        return std::vector<uint32_t>();
+    }
+
+    glslang_program_t* program = glslang_program_create();
+    glslang_program_add_shader(program, shader);
+
+    if (!glslang_program_link(program, GLSLANG_MSG_SPV_RULES_BIT | GLSLANG_MSG_VULKAN_RULES_BIT)) {
+        printf("GLSL linking failed %s\n", fileName);
+        printf("%s\n", glslang_program_get_info_log(program));
+        printf("%s\n", glslang_program_get_info_debug_log(program));
+        glslang_program_delete(program);
+        glslang_shader_delete(shader);
+        return std::vector<uint32_t>();
+    }
+
+    glslang_program_SPIRV_generate(program, stage);
+
+    std::vector<uint32_t> outShaderModule(glslang_program_SPIRV_get_size(program));
+    glslang_program_SPIRV_get(program, outShaderModule.data());
+
+    const char* spirv_messages = glslang_program_SPIRV_get_messages(program);
+    if (spirv_messages)
+        printf("(%s) %s\b", fileName, spirv_messages);
+
+    glslang_program_delete(program);
+    glslang_shader_delete(shader);
+
+    return outShaderModule;
+}
+```
+
 ## Basic Internal Operation
 
 * Initial lexical analysis is done by the preprocessor in
diff --git a/SPIRV/CInterface/spirv_c_interface.cpp b/SPIRV/CInterface/spirv_c_interface.cpp
index a0790f4..d56ad46 100644
--- a/SPIRV/CInterface/spirv_c_interface.cpp
+++ b/SPIRV/CInterface/spirv_c_interface.cpp
@@ -36,6 +36,8 @@
 #include "SPIRV/Logger.h"
 #include "SPIRV/SpvTools.h"
 
+static_assert(sizeof(glslang_spv_options_t) == sizeof(glslang::SpvOptions), "");
+
 typedef struct glslang_program_s {
     glslang::TProgram* program;
     std::vector<unsigned int> spirv;
@@ -57,22 +59,22 @@
         return EShLangFragment;
     case GLSLANG_STAGE_COMPUTE:
         return EShLangCompute;
-    case GLSLANG_STAGE_RAYGEN_NV:
+    case GLSLANG_STAGE_RAYGEN:
         return EShLangRayGen;
-    case GLSLANG_STAGE_INTERSECT_NV:
+    case GLSLANG_STAGE_INTERSECT:
         return EShLangIntersect;
-    case GLSLANG_STAGE_ANYHIT_NV:
+    case GLSLANG_STAGE_ANYHIT:
         return EShLangAnyHit;
-    case GLSLANG_STAGE_CLOSESTHIT_NV:
+    case GLSLANG_STAGE_CLOSESTHIT:
         return EShLangClosestHit;
-    case GLSLANG_STAGE_MISS_NV:
+    case GLSLANG_STAGE_MISS:
         return EShLangMiss;
-    case GLSLANG_STAGE_CALLABLE_NV:
+    case GLSLANG_STAGE_CALLABLE:
         return EShLangCallable;
-    case GLSLANG_STAGE_TASK_NV:
-        return EShLangTaskNV;
-    case GLSLANG_STAGE_MESH_NV:
-        return EShLangMeshNV;
+    case GLSLANG_STAGE_TASK:
+        return EShLangTask;
+    case GLSLANG_STAGE_MESH:
+        return EShLangMesh;
     default:
         break;
     }
@@ -81,13 +83,25 @@
 
 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;
+    spv_options.disable_optimizer = true;
+    spv_options.optimize_size = false;
+    spv_options.disassemble = false;
+    spv_options.validate = true;
+
+    glslang_program_SPIRV_generate_with_options(program, stage, &spv_options);
+}
+
+GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options) {
     spv::SpvBuildLogger logger;
-    glslang::SpvOptions spvOptions;
-    spvOptions.validate = true;
 
     const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
 
-    glslang::GlslangToSpv(*intermediate, program->spirv, &logger, &spvOptions);
+    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 22f767d..2408e4c 100644
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -62,7 +62,8 @@
     disassemble.h
     GLSL.ext.AMD.h
     GLSL.ext.NV.h
-    NonSemanticDebugPrintf.h)
+    NonSemanticDebugPrintf.h
+    NonSemanticShaderDebugInfo100.h)
 
 set(SPVREMAP_HEADERS
     SPVRemapper.h
@@ -109,30 +110,36 @@
 endif()
 
 if(ENABLE_GLSLANG_INSTALL)
-    if(BUILD_SHARED_LIBS)
-        if (ENABLE_SPVREMAPPER)
-            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
-                    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
-        endif()
-        install(TARGETS SPIRV EXPORT SPIRVTargets
-                ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-    else()
-        if (ENABLE_SPVREMAPPER)
-            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
-                    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-        endif()
-        install(TARGETS SPIRV EXPORT SPIRVTargets
-                ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-    endif()
-
     if (ENABLE_SPVREMAPPER)
-        install(EXPORT SPVRemapperTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+        install(TARGETS SPVRemapper EXPORT glslang-targets)
     endif()
 
-    install(EXPORT SPIRVTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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/)
 endif()
diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h
index f48f130..a247b4c 100644
--- a/SPIRV/GLSL.ext.EXT.h
+++ b/SPIRV/GLSL.ext.EXT.h
@@ -39,5 +39,6 @@
 static const char* const E_SPV_EXT_shader_atomic_float16_add = "SPV_EXT_shader_atomic_float16_add";
 static const char* const E_SPV_EXT_shader_atomic_float_min_max = "SPV_EXT_shader_atomic_float_min_max";
 static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64";
+static const char* const E_SPV_EXT_mesh_shader = "SPV_EXT_mesh_shader";
 
 #endif  // #ifndef GLSLextEXT_H
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
index 5eb3e94..d5c670f 100644
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -29,7 +29,7 @@
 #define GLSLextKHR_H
 
 static const int GLSLextKHRVersion = 100;
-static const int GLSLextKHRRevision = 2;
+static const int GLSLextKHRRevision = 3;
 
 static const char* const E_SPV_KHR_shader_ballot                = "SPV_KHR_shader_ballot";
 static const char* const E_SPV_KHR_subgroup_vote                = "SPV_KHR_subgroup_vote";
@@ -52,5 +52,7 @@
 static const char* const E_SPV_KHR_terminate_invocation         = "SPV_KHR_terminate_invocation";
 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_AMD_shader_early_and_late_fragment_tests = "SPV_AMD_shader_early_and_late_fragment_tests";
 
 #endif  // #ifndef GLSLextKHR_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 43aba9c..ccb4602 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -260,6 +260,7 @@
     std::unordered_map<std::string, spv::Id> extBuiltinMap;
 
     std::unordered_map<long long, spv::Id> symbolValues;
+    std::unordered_map<uint32_t, spv::Id> builtInVariableIds;
     std::unordered_set<long long> rValueParameters;  // set of formal function parameters passed as rValues,
                                                // rather than a pointer
     std::unordered_map<std::string, spv::Function*> functionMap;
@@ -279,6 +280,9 @@
 
     // Used later for generating OpTraceKHR/OpExecuteCallableKHR
     std::unordered_map<unsigned int, glslang::TIntermSymbol *> locationToSymbol[2];
+
+    // Used by Task shader while generating opearnds for OpEmitMeshTasksEXT
+    spv::Id taskPayloadID;
 };
 
 //
@@ -314,7 +318,7 @@
 }
 
 // Translate glslang language (stage) to SPIR-V execution model.
-spv::ExecutionModel TranslateExecutionModel(EShLanguage stage)
+spv::ExecutionModel TranslateExecutionModel(EShLanguage stage, bool isMeshShaderEXT = false)
 {
     switch (stage) {
     case EShLangVertex:           return spv::ExecutionModelVertex;
@@ -330,8 +334,8 @@
     case EShLangClosestHit:       return spv::ExecutionModelClosestHitKHR;
     case EShLangMiss:             return spv::ExecutionModelMissKHR;
     case EShLangCallable:         return spv::ExecutionModelCallableKHR;
-    case EShLangTaskNV:           return spv::ExecutionModelTaskNV;
-    case EShLangMeshNV:           return spv::ExecutionModelMeshNV;
+    case EShLangTask:             return (isMeshShaderEXT)? spv::ExecutionModelTaskEXT : spv::ExecutionModelTaskNV;
+    case EShLangMesh:             return (isMeshShaderEXT)? spv::ExecutionModelMeshEXT: spv::ExecutionModelMeshNV;
 #endif
     default:
         assert(0);
@@ -762,7 +766,7 @@
         return spv::BuiltInSampleMask;
 
     case glslang::EbvLayer:
-        if (glslangIntermediate->getStage() == EShLangMeshNV) {
+        if (glslangIntermediate->getStage() == EShLangMesh) {
             return spv::BuiltInLayer;
         }
         if (glslangIntermediate->getStage() == EShLangGeometry ||
@@ -1007,6 +1011,8 @@
         return spv::BuiltInRayTminKHR;
     case glslang::EbvRayTmax:
         return spv::BuiltInRayTmaxKHR;
+    case glslang::EbvCullMask:
+        return spv::BuiltInCullMaskKHR;
     case glslang::EbvInstanceCustomIndex:
         return spv::BuiltInInstanceCustomIndexKHR;
     case glslang::EbvHitT:
@@ -1048,6 +1054,15 @@
         builder.addCapability(spv::CapabilityFragmentBarycentricNV);
         return spv::BuiltInBaryCoordNoPerspNV;
 
+    case glslang::EbvBaryCoordEXT:
+        builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric);
+        builder.addCapability(spv::CapabilityFragmentBarycentricKHR);
+        return spv::BuiltInBaryCoordKHR;
+    case glslang::EbvBaryCoordNoPerspEXT:
+        builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric);
+        builder.addCapability(spv::CapabilityFragmentBarycentricKHR);
+        return spv::BuiltInBaryCoordNoPerspKHR;
+
     // mesh shaders
     case glslang::EbvTaskCountNV:
         return spv::BuiltInTaskCountNV;
@@ -1066,6 +1081,16 @@
     case glslang::EbvMeshViewIndicesNV:
         return spv::BuiltInMeshViewIndicesNV;
 
+    // SPV_EXT_mesh_shader
+    case glslang::EbvPrimitivePointIndicesEXT:
+        return spv::BuiltInPrimitivePointIndicesEXT;
+    case glslang::EbvPrimitiveLineIndicesEXT:
+        return spv::BuiltInPrimitiveLineIndicesEXT;
+    case glslang::EbvPrimitiveTriangleIndicesEXT:
+        return spv::BuiltInPrimitiveTriangleIndicesEXT;
+    case glslang::EbvCullPrimitiveEXT:
+        return spv::BuiltInCullPrimitiveEXT;
+
     // sm builtins
     case glslang::EbvWarpsPerSM:
         builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
@@ -1256,8 +1281,10 @@
     if (type.getBasicType() == glslang::EbtRayQuery)
         return spv::StorageClassPrivate;
 #ifndef GLSLANG_WEB
-    if (type.getQualifier().isSpirvByReference())
-        return spv::StorageClassFunction;
+    if (type.getQualifier().isSpirvByReference()) {
+        if (type.getQualifier().isParamInput() || type.getQualifier().isParamOutput())
+            return spv::StorageClassFunction;
+    }
 #endif
     if (type.getQualifier().isPipeInput())
         return spv::StorageClassInput;
@@ -1307,6 +1334,7 @@
     case glslang::EvqHitAttr:        return spv::StorageClassHitAttributeKHR;
     case glslang::EvqCallableData:   return spv::StorageClassCallableDataKHR;
     case glslang::EvqCallableDataIn: return spv::StorageClassIncomingCallableDataKHR;
+    case glslang::EvqtaskPayloadSharedEXT : return spv::StorageClassTaskPayloadWorkgroupEXT;
     case glslang::EvqSpirvStorageClass: return static_cast<spv::StorageClass>(type.getQualifier().spirvStorageClass);
 #endif
     default:
@@ -1324,7 +1352,9 @@
     for (auto constant : constants) {
         if (constant->getBasicType() == glslang::EbtFloat) {
             float floatValue = static_cast<float>(constant->getConstArray()[0].getDConst());
-            unsigned literal = *reinterpret_cast<unsigned*>(&floatValue);
+            unsigned literal;
+            static_assert(sizeof(literal) == sizeof(floatValue), "sizeof(unsigned) != sizeof(float)");
+            memcpy(&literal, &floatValue, sizeof(literal));
             literals.push_back(literal);
         } else if (constant->getBasicType() == glslang::EbtInt) {
             unsigned literal = constant->getConstArray()[0].getIConst();
@@ -1450,6 +1480,8 @@
         child.perViewNV = true;
     if (parent.perTaskNV)
         child.perTaskNV = true;
+    if (parent.storage == glslang::EvqtaskPayloadSharedEXT)
+        child.storage = glslang::EvqtaskPayloadSharedEXT;
     if (parent.patch)
         child.patch = true;
     if (parent.sample)
@@ -1509,9 +1541,12 @@
         inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
         glslangIntermediate(glslangIntermediate),
         nanMinMaxClamp(glslangIntermediate->getNanMinMaxClamp()),
-        nonSemanticDebugPrintf(0)
+        nonSemanticDebugPrintf(0),
+        taskPayloadID(0)
 {
-    spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
+    bool isMeshShaderExt = (glslangIntermediate->getRequestedExtensions().find(glslang::E_GL_EXT_mesh_shader) !=
+                            glslangIntermediate->getRequestedExtensions().end());
+    spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage(), isMeshShaderExt);
 
     builder.clearAccessChain();
     builder.setSource(TranslateSourceLanguage(glslangIntermediate->getSource(), glslangIntermediate->getProfile()),
@@ -1543,6 +1578,10 @@
         for (auto iItr = include_txt.begin(); iItr != include_txt.end(); ++iItr)
             builder.addInclude(iItr->first, iItr->second);
     }
+
+    builder.setEmitNonSemanticShaderDebugInfo(options.emitNonSemanticShaderDebugInfo);
+    builder.setEmitNonSemanticShaderDebugSource(options.emitNonSemanticShaderDebugSource);
+
     stdBuiltins = builder.import("GLSL.std.450");
 
     spv::AddressingModel addressingModel = spv::AddressingModelLogical;
@@ -1609,6 +1648,12 @@
         if (glslangIntermediate->getEarlyFragmentTests())
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests);
 
+        if (glslangIntermediate->getEarlyAndLateFragmentTestsAMD())
+        {
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyAndLateFragmentTestsAMD);
+            builder.addExtension(spv::E_SPV_AMD_shader_early_and_late_fragment_tests);
+        }
+
         if (glslangIntermediate->getPostDepthCoverage()) {
             builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage);
             builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage);
@@ -1618,6 +1663,9 @@
         if (glslangIntermediate->isDepthReplacing())
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing);
 
+        if (glslangIntermediate->isStencilReplacing())
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeStencilRefReplacingEXT);
+
 #ifndef GLSLANG_WEB
 
         switch(glslangIntermediate->getDepth()) {
@@ -1626,6 +1674,20 @@
         case glslang::EldUnchanged: mode = spv::ExecutionModeDepthUnchanged; break;
         default:                    mode = spv::ExecutionModeMax;            break;
         }
+
+        if (mode != spv::ExecutionModeMax)
+            builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
+
+        switch (glslangIntermediate->getStencil()) {
+        case glslang::ElsRefUnchangedFrontAMD:  mode = spv::ExecutionModeStencilRefUnchangedFrontAMD; break;
+        case glslang::ElsRefGreaterFrontAMD:    mode = spv::ExecutionModeStencilRefGreaterFrontAMD;   break;
+        case glslang::ElsRefLessFrontAMD:       mode = spv::ExecutionModeStencilRefLessFrontAMD;      break;
+        case glslang::ElsRefUnchangedBackAMD:   mode = spv::ExecutionModeStencilRefUnchangedBackAMD;  break;
+        case glslang::ElsRefGreaterBackAMD:     mode = spv::ExecutionModeStencilRefGreaterBackAMD;    break;
+        case glslang::ElsRefLessBackAMD:        mode = spv::ExecutionModeStencilRefLessBackAMD;       break;
+        default:                       mode = spv::ExecutionModeMax;                         break;
+        }
+
         if (mode != spv::ExecutionModeMax)
             builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
         switch (glslangIntermediate->getInterlockOrdering()) {
@@ -1662,9 +1724,22 @@
 
     case EShLangCompute:
         builder.addCapability(spv::CapabilityShader);
-        builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
-                                                                           glslangIntermediate->getLocalSize(1),
-                                                                           glslangIntermediate->getLocalSize(2));
+        if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) {
+          std::vector<spv::Id> dimConstId;
+          for (int dim = 0; dim < 3; ++dim) {
+            bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet);
+            dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst));
+            if (specConst) {
+                builder.addDecoration(dimConstId.back(), spv::DecorationSpecId,
+                                      glslangIntermediate->getLocalSizeSpecId(dim));
+            }
+          }
+          builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId);
+        } else {
+          builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
+                                                                             glslangIntermediate->getLocalSize(1),
+                                                                             glslangIntermediate->getLocalSize(2));
+        }
         if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) {
             builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV);
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupQuadsNV);
@@ -1751,7 +1826,7 @@
     case EShLangAnyHit:
     case EShLangClosestHit:
     case EShLangMiss:
-    case EShLangCallable: 
+    case EShLangCallable:
     {
         auto& extensions = glslangIntermediate->getRequestedExtensions();
         if (extensions.find("GL_NV_ray_tracing") == extensions.end()) {
@@ -1762,16 +1837,41 @@
             builder.addCapability(spv::CapabilityRayTracingNV);
             builder.addExtension("SPV_NV_ray_tracing");
         }
+	if (glslangIntermediate->getStage() != EShLangRayGen && glslangIntermediate->getStage() != EShLangCallable)
+	{
+		if (extensions.find("GL_EXT_ray_cull_mask") != extensions.end()) {
+			builder.addCapability(spv::CapabilityRayCullMaskKHR);
+			builder.addExtension("SPV_KHR_ray_cull_mask");
+		}
+	}
         break;
     }
-    case EShLangTaskNV:
-    case EShLangMeshNV:
-        builder.addCapability(spv::CapabilityMeshShadingNV);
-        builder.addExtension(spv::E_SPV_NV_mesh_shader);
-        builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
-                                                                           glslangIntermediate->getLocalSize(1),
-                                                                           glslangIntermediate->getLocalSize(2));
-        if (glslangIntermediate->getStage() == EShLangMeshNV) {
+    case EShLangTask:
+    case EShLangMesh:
+        if(isMeshShaderExt) {
+            builder.addCapability(spv::CapabilityMeshShadingEXT);
+            builder.addExtension(spv::E_SPV_EXT_mesh_shader);
+        } else {
+            builder.addCapability(spv::CapabilityMeshShadingNV);
+            builder.addExtension(spv::E_SPV_NV_mesh_shader);
+        }
+        if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) {
+            std::vector<spv::Id> dimConstId;
+            for (int dim = 0; dim < 3; ++dim) {
+                bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet);
+                dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst));
+                if (specConst) {
+                    builder.addDecoration(dimConstId.back(), spv::DecorationSpecId,
+                                          glslangIntermediate->getLocalSizeSpecId(dim));
+                }
+            }
+            builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId);
+        } else {
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
+                                                                               glslangIntermediate->getLocalSize(1),
+                                                                               glslangIntermediate->getLocalSize(2));
+        }
+        if (glslangIntermediate->getStage() == EShLangMesh) {
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices,
                 glslangIntermediate->getVertices());
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputPrimitivesNV,
@@ -1890,7 +1990,6 @@
 
     if (symbol->getType().getQualifier().isSpecConstant())
         spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
-
 #ifdef ENABLE_HLSL
     // Skip symbol handling if it is string-typed
     if (symbol->getBasicType() == glslang::EbtString)
@@ -1901,6 +2000,9 @@
     // Formal function parameters were mapped during makeFunctions().
     spv::Id id = getSymbolId(symbol);
 
+    if (symbol->getType().getQualifier().isTaskPayload())
+        taskPayloadID = id; // cache the taskPayloadID to be used it as operand for OpEmitMeshTasksEXT
+
     if (builder.isPointer(id)) {
         if (!symbol->getType().getQualifier().isParamInput() &&
             !symbol->getType().getQualifier().isParamOutput()) {
@@ -2428,6 +2530,14 @@
         return false;
     }
 
+    // Force variable declaration - Debug Mode Only
+    if (node->getOp() == glslang::EOpDeclare) {
+        builder.clearAccessChain();
+        node->getOperand()->traverse(this);
+        builder.clearAccessChain();
+        return false;
+    }
+
     // Start by evaluating the operand
 
     // Does it need a swizzle inversion?  If so, evaluation is inverted;
@@ -2444,7 +2554,7 @@
         operandNode = node->getOperand()->getAsBinaryNode()->getLeft();
     else
         operandNode = node->getOperand();
-    
+
     operandNode->traverse(this);
 
     spv::Id operand = spv::NoResult;
@@ -2688,32 +2798,38 @@
     spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
 
     switch (node->getOp()) {
+    case glslang::EOpScope:
     case glslang::EOpSequence:
     {
-        if (preVisit)
+        if (visit == glslang::EvPreVisit) {
             ++sequenceDepth;
-        else
+            if (sequenceDepth == 1) {
+                // If this is the parent node of all the functions, we want to see them
+                // early, so all call points have actual SPIR-V functions to reference.
+                // In all cases, still let the traverser visit the children for us.
+                makeFunctions(node->getAsAggregate()->getSequence());
+
+                // Also, we want all globals initializers to go into the beginning of the entry point, before
+                // anything else gets there, so visit out of order, doing them all now.
+                makeGlobalInitializers(node->getAsAggregate()->getSequence());
+
+                //Pre process linker objects for ray tracing stages
+                if (glslangIntermediate->isRayTracingStage())
+                  collectRayTracingLinkerObjects();
+
+                // Initializers are done, don't want to visit again, but functions and link objects need to be processed,
+                // so do them manually.
+                visitFunctions(node->getAsAggregate()->getSequence());
+
+                return false;
+            } else {
+                if (node->getOp() == glslang::EOpScope)
+                    builder.enterScope(0);
+            }
+        } else {
+            if (sequenceDepth > 1 && node->getOp() == glslang::EOpScope)
+                builder.leaveScope();
             --sequenceDepth;
-
-        if (sequenceDepth == 1) {
-            // If this is the parent node of all the functions, we want to see them
-            // early, so all call points have actual SPIR-V functions to reference.
-            // In all cases, still let the traverser visit the children for us.
-            makeFunctions(node->getAsAggregate()->getSequence());
-
-            // Also, we want all globals initializers to go into the beginning of the entry point, before
-            // anything else gets there, so visit out of order, doing them all now.
-            makeGlobalInitializers(node->getAsAggregate()->getSequence());
-
-            //Pre process linker objects for ray tracing stages
-            if (glslangIntermediate->isRayTracingStage())
-                collectRayTracingLinkerObjects();
-
-            // Initializers are done, don't want to visit again, but functions and link objects need to be processed,
-            // so do them manually.
-            visitFunctions(node->getAsAggregate()->getSequence());
-
-            return false;
         }
 
         return true;
@@ -2742,10 +2858,17 @@
             if (isShaderEntryPoint(node)) {
                 inEntryPoint = true;
                 builder.setBuildPoint(shaderEntry->getLastBlock());
+                builder.enterFunction(shaderEntry);
                 currentFunction = shaderEntry;
             } else {
                 handleFunctionEntry(node);
             }
+            if (options.generateDebugInfo) {
+                const auto& loc = node->getLoc();
+                const char* sourceFileName = loc.getFilename();
+                spv::Id sourceFileId = sourceFileName ? builder.getStringId(sourceFileName) : builder.getSourceFile();
+                currentFunction->setDebugLineInfo(sourceFileId, loc.line, loc.column);
+            }
         } else {
             if (inEntryPoint)
                 entryPointTerminated = true;
@@ -2885,9 +3008,17 @@
         std::vector<spv::Id> arguments;
         translateArguments(*node, arguments, lvalueCoherentFlags);
         spv::Id constructed;
-        if (node->getOp() == glslang::EOpConstructTextureSampler)
-            constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments);
-        else if (node->getOp() == glslang::EOpConstructStruct ||
+        if (node->getOp() == glslang::EOpConstructTextureSampler) {
+            const glslang::TType& texType = node->getSequence()[0]->getAsTyped()->getType();
+            if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6 &&
+                texType.getSampler().isBuffer()) {
+                // SamplerBuffer is not supported in spirv1.6 so
+                // `samplerBuffer(textureBuffer, sampler)` is a no-op
+                // and textureBuffer is the result going forward
+                constructed = arguments[0];
+            } else
+                constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments);
+        } else if (node->getOp() == glslang::EOpConstructStruct ||
                  node->getOp() == glslang::EOpConstructCooperativeMatrix ||
                  node->getType().isArray()) {
             std::vector<spv::Id> constituents;
@@ -3027,6 +3158,8 @@
     case glslang::EOpExecuteCallableNV:
     case glslang::EOpExecuteCallableKHR:
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
+    case glslang::EOpEmitMeshTasksEXT:
+    case glslang::EOpSetMeshOutputsEXT:
         noReturnValue = true;
         break;
     case glslang::EOpRayQueryInitialize:
@@ -3421,7 +3554,7 @@
             break;
         case 1:
             {
-                OpDecorations decorations = { precision, 
+                OpDecorations decorations = { precision,
                                               TranslateNoContractionDecoration(node->getType().getQualifier()),
                                               TranslateNonUniformDecoration(node->getType().getQualifier()) };
                 result = createUnaryOperation(
@@ -3543,7 +3676,7 @@
             // smear condition to vector, if necessary (AST is always scalar)
             // Before 1.4, smear like for mix(), starting with 1.4, keep it scalar
             if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_4 && builder.isVector(trueValue)) {
-                condition = builder.smearScalar(spv::NoPrecision, condition, 
+                condition = builder.smearScalar(spv::NoPrecision, condition,
                                                 builder.makeVectorType(builder.makeBoolType(),
                                                                        builder.getNumComponents(trueValue)));
             }
@@ -3714,8 +3847,8 @@
     // by a block-ending branch.  But we don't want to put any other body/test
     // instructions in it, since the body/test may have arbitrary instructions,
     // including merges of its own.
-    builder.setLine(node->getLoc().line, node->getLoc().getFilename());
     builder.setBuildPoint(&blocks.head);
+    builder.setLine(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();
@@ -3777,7 +3910,16 @@
 
     switch (node->getFlowOp()) {
     case glslang::EOpKill:
-        builder.makeStatementTerminator(spv::OpKill, "post-discard");
+        if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) {
+            if (glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
+              builder.addCapability(spv::CapabilityDemoteToHelperInvocation);
+              builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT);
+            } else {
+                builder.makeStatementTerminator(spv::OpTerminateInvocation, "post-terminate-invocation");
+            }
+        } else {
+            builder.makeStatementTerminator(spv::OpKill, "post-discard");
+        }
         break;
     case glslang::EOpTerminateInvocation:
         builder.addExtension(spv::E_SPV_KHR_terminate_invocation);
@@ -3925,7 +4067,7 @@
         initializer = builder.makeNullConstant(spvType);
     }
 
-    return builder.createVariable(spv::NoPrecision, storageClass, spvType, name, initializer);
+    return builder.createVariable(spv::NoPrecision, storageClass, spvType, name, initializer, false);
 }
 
 // Return type Id of the sampled type.
@@ -4013,7 +4155,7 @@
         if (explicitLayout != glslang::ElpNone)
             spvType = builder.makeUintType(32);
         else
-            spvType = builder.makeBoolType();
+            spvType = builder.makeBoolType(false);
         break;
     case glslang::EbtInt:
         spvType = builder.makeIntType(32);
@@ -4113,8 +4255,10 @@
                 spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler),
                                                 sampler.isShadow(), sampler.isArrayed(), sampler.isMultiSample(),
                                                 sampler.isImageClass() ? 2 : 1, TranslateImageFormat(type));
-                if (sampler.isCombined()) {
-                    // already has both image and sampler, make the combined type
+                if (sampler.isCombined() &&
+                    (!sampler.isBuffer() || glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_6)) {
+                    // Already has both image and sampler, make the combined type. Only combine sampler to
+                    // buffer if before SPIR-V 1.6.
                     spvType = builder.makeSampledImageType(spvType);
                 }
             }
@@ -4148,23 +4292,25 @@
         const auto& spirvType = type.getSpirvType();
         const auto& spirvInst = spirvType.spirvInst;
 
-        std::vector<spv::Id> operands;
+        std::vector<spv::IdImmediate> operands;
         for (const auto& typeParam : spirvType.typeParams) {
             // Constant expression
             if (typeParam.constant->isLiteral()) {
                 if (typeParam.constant->getBasicType() == glslang::EbtFloat) {
                     float floatValue = static_cast<float>(typeParam.constant->getConstArray()[0].getDConst());
-                    unsigned literal = *reinterpret_cast<unsigned*>(&floatValue);
-                    operands.push_back(literal);
+                    unsigned literal;
+                    static_assert(sizeof(literal) == sizeof(floatValue), "sizeof(unsigned) != sizeof(float)");
+                    memcpy(&literal, &floatValue, sizeof(literal));
+                    operands.push_back({false, literal});
                 } else if (typeParam.constant->getBasicType() == glslang::EbtInt) {
                     unsigned literal = typeParam.constant->getConstArray()[0].getIConst();
-                    operands.push_back(literal);
+                    operands.push_back({false, literal});
                 } else if (typeParam.constant->getBasicType() == glslang::EbtUint) {
                     unsigned literal = typeParam.constant->getConstArray()[0].getUConst();
-                    operands.push_back(literal);
+                    operands.push_back({false, literal});
                 } else if (typeParam.constant->getBasicType() == glslang::EbtBool) {
                     unsigned literal = typeParam.constant->getConstArray()[0].getBConst();
-                    operands.push_back(literal);
+                    operands.push_back({false, literal});
                 } else if (typeParam.constant->getBasicType() == glslang::EbtString) {
                     auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str();
                     unsigned literal = 0;
@@ -4176,7 +4322,7 @@
                         *(literalPtr++) = ch;
                         ++charCount;
                         if (charCount == 4) {
-                            operands.push_back(literal);
+                            operands.push_back({false, literal});
                             literalPtr = reinterpret_cast<char*>(&literal);
                             charCount = 0;
                         }
@@ -4186,20 +4332,17 @@
                     if (charCount > 0) {
                         for (; charCount < 4; ++charCount)
                             *(literalPtr++) = 0;
-                        operands.push_back(literal);
+                        operands.push_back({false, literal});
                     }
                 } else
                     assert(0); // Unexpected type
             } else
-                operands.push_back(createSpvConstant(*typeParam.constant));
+                operands.push_back({true, createSpvConstant(*typeParam.constant)});
         }
 
-        if (spirvInst.set == "")
-            spvType = builder.createOp(static_cast<spv::Op>(spirvInst.id), spv::NoType, operands);
-        else {
-            spvType = builder.createBuiltinCall(
-                spv::NoType, getExtBuiltins(spirvInst.set.c_str()), spirvInst.id, operands);
-        }
+        assert(spirvInst.set == ""); // Currently, couldn't be extended instructions.
+        spvType = builder.makeGenericType(static_cast<spv::Op>(spirvInst.id), operands);
+
         break;
     }
 #endif
@@ -4302,7 +4445,7 @@
         extensions.find("GL_NV_stereo_view_rendering") == extensions.end())
         return true;
 
-    if (glslangIntermediate->getStage() != EShLangMeshNV) {
+    if (glslangIntermediate->getStage() != EShLangMesh) {
         if (member.getFieldName() == "gl_ViewportMask" &&
             extensions.find("GL_NV_viewport_array2") == extensions.end())
             return true;
@@ -4332,14 +4475,14 @@
                           // except sometimes for blocks
     std::vector<std::pair<glslang::TType*, glslang::TQualifier> > deferredForwardPointers;
     for (int i = 0; i < (int)glslangMembers->size(); i++) {
-        glslang::TType& glslangMember = *(*glslangMembers)[i].type;
-        if (glslangMember.hiddenMember()) {
+        auto& glslangMember = (*glslangMembers)[i];
+        if (glslangMember.type->hiddenMember()) {
             ++memberDelta;
             if (type.getBasicType() == glslang::EbtBlock)
                 memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1;
         } else {
             if (type.getBasicType() == glslang::EbtBlock) {
-                if (filterMember(glslangMember)) {
+                if (filterMember(*glslangMember.type)) {
                     memberDelta++;
                     memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1;
                     continue;
@@ -4347,7 +4490,7 @@
                 memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = i - memberDelta;
             }
             // modify just this child's view of the qualifier
-            glslang::TQualifier memberQualifier = glslangMember.getQualifier();
+            glslang::TQualifier memberQualifier = glslangMember.type->getQualifier();
             InheritQualifiers(memberQualifier, qualifier);
 
             // manually inherit location
@@ -4358,25 +4501,38 @@
             bool lastBufferBlockMember = qualifier.storage == glslang::EvqBuffer &&
                                          i == (int)glslangMembers->size() - 1;
 
-            // Make forward pointers for any pointer members, and create a list of members to
-            // convert to spirv types after creating the struct.
-            if (glslangMember.isReference()) {
-                if (forwardPointers.find(glslangMember.getReferentType()) == forwardPointers.end()) {
-                    deferredForwardPointers.push_back(std::make_pair(&glslangMember, memberQualifier));
-                }
-                spvMembers.push_back(
-                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember,
-                        true));
-            } else {
-                spvMembers.push_back(
-                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember,
-                        false));
+            // Make forward pointers for any pointer members.
+            if (glslangMember.type->isReference() &&
+                forwardPointers.find(glslangMember.type->getReferentType()) == forwardPointers.end()) {
+                deferredForwardPointers.push_back(std::make_pair(glslangMember.type, memberQualifier));
+            }
+
+            // Create the member type.
+            auto const spvMember = convertGlslangToSpvType(*glslangMember.type, explicitLayout, memberQualifier, lastBufferBlockMember,
+                glslangMember.type->isReference());
+            spvMembers.push_back(spvMember);
+
+            // Update the builder with the type's location so that we can create debug types for the structure members.
+            // There doesn't exist a "clean" entry point for this information to be passed along to the builder so, for now,
+            // it is stored in the builder and consumed during the construction of composite debug types.
+            // TODO: This probably warrants further investigation. This approach was decided to be the least ugly of the
+            // quick and dirty approaches that were tried.
+            // Advantages of this approach:
+            //  + Relatively clean. No direct calls into debug type system.
+            //  + Handles nested recursive structures.
+            // Disadvantages of this approach:
+            //  + Not as clean as desired. Traverser queries/sets persistent state. This is fragile.
+            //  + Table lookup during creation of composite debug types. This really shouldn't be necessary.
+            if(options.emitNonSemanticShaderDebugInfo) {
+                builder.debugTypeLocs[spvMember].name = glslangMember.type->getFieldName().c_str();
+                builder.debugTypeLocs[spvMember].line = glslangMember.loc.line;
+                builder.debugTypeLocs[spvMember].column = glslangMember.loc.column;
             }
         }
     }
 
     // Make the SPIR-V type
-    spv::Id spvType = builder.makeStructType(spvMembers, type.getTypeName().c_str());
+    spv::Id spvType = builder.makeStructType(spvMembers, type.getTypeName().c_str(), false);
     if (! HasNonLayoutQualifiers(type, qualifier))
         structMap[explicitLayout][qualifier.layoutMatrix][glslangMembers] = spvType;
 
@@ -4970,6 +5126,7 @@
         //   GLSL has copy-in/copy-out semantics.  They can be handled though with a pointer to a copy.
 
         std::vector<spv::Id> paramTypes;
+        std::vector<char const*> paramNames;
         std::vector<std::vector<spv::Decoration>> paramDecorations; // list of decorations per parameter
         glslang::TIntermSequence& parameters = glslFunction->getSequence()[0]->getAsAggregate()->getSequence();
 
@@ -4994,10 +5151,14 @@
             paramTypes.push_back(typeId);
         }
 
+        for (auto const parameter:parameters) {
+            paramNames.push_back(parameter->getAsSymbolNode()->getName().c_str());
+        }
+
         spv::Block* functionBlock;
         spv::Function *function = builder.makeFunctionEntry(TranslatePrecisionDecoration(glslFunction->getType()),
                                                             convertGlslangToSpvType(glslFunction->getType()),
-                                                            glslFunction->getName().c_str(), paramTypes,
+                                                            glslFunction->getName().c_str(), paramTypes, paramNames,
                                                             paramDecorations, &functionBlock);
         if (implicitThis)
             function->setImplicitThis();
@@ -5087,6 +5248,7 @@
     currentFunction = functionMap[node->getName().c_str()];
     spv::Block* functionBlock = currentFunction->getEntryBlock();
     builder.setBuildPoint(functionBlock);
+    builder.enterFunction(currentFunction);
 }
 
 void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments,
@@ -5514,10 +5676,12 @@
             operands.push_back(sample);
 
             spv::Id resultTypeId;
+            glslang::TBasicType typeProxy = node->getBasicType();
             // imageAtomicStore has a void return type so base the pointer type on
             // the type of the value operand.
             if (node->getOp() == glslang::EOpImageAtomicStore) {
                 resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(*opIt));
+                typeProxy = node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler().type;
             } else {
                 resultTypeId = builder.makePointer(spv::StorageClassImage, resultType());
             }
@@ -5531,7 +5695,7 @@
             for (; opIt != arguments.end(); ++opIt)
                 operands.push_back(*opIt);
 
-            return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(),
+            return createAtomicOperation(node->getOp(), precision, resultType(), operands, typeProxy,
                 lvalueCoherentFlags);
         }
     }
@@ -5735,10 +5899,10 @@
         assert(builder.isStructType(resultStructType));
 
         //resType (SPIR-V type) contains 6 elements:
-        //Member 0 must be a Boolean type scalar(LOD), 
-        //Member 1 must be a vector of integer type, whose Signedness operand is 0(anchor),  
-        //Member 2 must be a vector of integer type, whose Signedness operand is 0(offset), 
-        //Member 3 must be a vector of integer type, whose Signedness operand is 0(mask), 
+        //Member 0 must be a Boolean type scalar(LOD),
+        //Member 1 must be a vector of integer type, whose Signedness operand is 0(anchor),
+        //Member 2 must be a vector of integer type, whose Signedness operand is 0(offset),
+        //Member 3 must be a vector of integer type, whose Signedness operand is 0(mask),
         //Member 4 must be a scalar of integer type, whose Signedness operand is 0(lod),
         //Member 5 must be a scalar of integer type, whose Signedness operand is 0(granularity).
         std::vector<spv::Id> members;
@@ -5751,7 +5915,7 @@
         //call ImageFootprintNV
         spv::Id res = builder.createTextureCall(precision, resType, sparse, cracked.fetch, cracked.proj,
                                                 cracked.gather, noImplicitLod, params, signExtensionMask());
-        
+
         //copy resType (SPIR-V type) to resultStructType(OpenGL type)
         for (int i = 0; i < 5; i++) {
             builder.clearAccessChain();
@@ -5804,7 +5968,7 @@
     }
 #endif
 
-    std::vector<spv::Id> result( 1, 
+    std::vector<spv::Id> result( 1,
         builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather,
                                   noImplicitLod, params, signExtensionMask())
     );
@@ -7327,7 +7491,7 @@
     } else {
         scopeId = builder.makeUintConstant(spv::ScopeDevice);
     }
-    // semantics default to relaxed 
+    // semantics default to relaxed
     spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() &&
         glslangIntermediate->usingVulkanMemoryModel() ?
                                                     spv::MemorySemanticsVolatileMask :
@@ -8431,6 +8595,15 @@
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
         builder.createNoResultOp(spv::OpWritePackedPrimitiveIndices4x8NV, operands);
         return 0;
+    case glslang::EOpEmitMeshTasksEXT:
+        if (taskPayloadID)
+            operands.push_back(taskPayloadID);
+        // As per SPV_EXT_mesh_shader make it a terminating instruction in the current block
+        builder.makeStatementTerminator(spv::OpEmitMeshTasksEXT, operands, "post-OpEmitMeshTasksEXT");
+        return 0;
+    case glslang::EOpSetMeshOutputsEXT:
+        builder.createNoResultOp(spv::OpSetMeshOutputsEXT, operands);
+        return 0;
     case glslang::EOpCooperativeMatrixMulAdd:
         opCode = spv::OpCooperativeMatrixMulAddNV;
         break;
@@ -8694,7 +8867,32 @@
     // it was not found, create it
     spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
     auto forcedType = getForcedType(symbol->getQualifier().builtIn, symbol->getType());
+
+    // There are pairs of symbols that map to the same SPIR-V built-in:
+    // gl_ObjectToWorldEXT and gl_ObjectToWorld3x4EXT, and gl_WorldToObjectEXT
+    // and gl_WorldToObject3x4EXT. SPIR-V forbids having two OpVariables
+    // with the same BuiltIn in the same storage class, so we must re-use one.
+    const bool mayNeedToReuseBuiltIn =
+        builtIn == spv::BuiltInObjectToWorldKHR ||
+        builtIn == spv::BuiltInWorldToObjectKHR;
+
+    if (mayNeedToReuseBuiltIn) {
+        auto iter = builtInVariableIds.find(uint32_t(builtIn));
+        if (builtInVariableIds.end() != iter) {
+            id = iter->second;
+            symbolValues[symbol->getId()] = id;
+            if (forcedType.second != spv::NoType)
+                forceType[id] = forcedType.second;
+            return id;
+        }
+    }
+
     id = createSpvVariable(symbol, forcedType.first);
+
+    if (mayNeedToReuseBuiltIn) {
+        builtInVariableIds.insert({uint32_t(builtIn), id});
+    }
+
     symbolValues[symbol->getId()] = id;
     if (forcedType.second != spv::NoType)
         forceType[id] = forcedType.second;
@@ -8717,8 +8915,18 @@
             builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset);
     }
 
-    if (symbol->getQualifier().hasLocation())
-        builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation);
+    if (symbol->getQualifier().hasLocation()) {
+        if (!(glslangIntermediate->isRayTracingStage() && glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_ray_tracing)
+              && (builder.getStorageClass(id) == spv::StorageClassRayPayloadKHR ||
+                  builder.getStorageClass(id) == spv::StorageClassIncomingRayPayloadKHR ||
+                  builder.getStorageClass(id) == spv::StorageClassCallableDataKHR ||
+                  builder.getStorageClass(id) == spv::StorageClassIncomingCallableDataKHR))) {
+            // Location values are used to link TraceRayKHR and ExecuteCallableKHR to corresponding variables
+            // but are not valid in SPIRV since they are supported only for Input/Output Storage classes.
+            builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation);
+        }
+    }
+
     builder.addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier()));
     if (symbol->getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
         builder.addCapability(spv::CapabilityGeometryStreams);
@@ -8752,7 +8960,16 @@
 
     // add built-in variable decoration
     if (builtIn != spv::BuiltInMax) {
-        builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
+        // WorkgroupSize deprecated in spirv1.6
+        if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_6 ||
+            builtIn != spv::BuiltInWorkgroupSize)
+            builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
+    }
+
+    // Add volatile decoration to HelperInvocation for spirv1.6 and beyond
+    if (builtIn == spv::BuiltInHelperInvocation &&
+        glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) {
+        builder.addDecoration(id, spv::DecorationVolatile);
     }
 
 #ifndef GLSLANG_WEB
@@ -8804,6 +9021,12 @@
         builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
     }
 
+    if (symbol->getQualifier().pervertexEXT) {
+        builder.addDecoration(id, spv::DecorationPerVertexKHR);
+        builder.addCapability(spv::CapabilityFragmentBarycentricKHR);
+        builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric);
+    }
+
     if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) {
         builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
         builder.addDecoration(id, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE,
@@ -8865,13 +9088,21 @@
 // add per-primitive, per-view. per-task decorations to a struct member (member >= 0) or an object
 void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier& qualifier)
 {
+    bool isMeshShaderExt = (glslangIntermediate->getRequestedExtensions().find(glslang::E_GL_EXT_mesh_shader) !=
+                            glslangIntermediate->getRequestedExtensions().end());
+
     if (member >= 0) {
         if (qualifier.perPrimitiveNV) {
             // Need to add capability/extension for fragment shader.
             // Mesh shader already adds this by default.
             if (glslangIntermediate->getStage() == EShLangFragment) {
-                builder.addCapability(spv::CapabilityMeshShadingNV);
-                builder.addExtension(spv::E_SPV_NV_mesh_shader);
+                if(isMeshShaderExt) {
+                    builder.addCapability(spv::CapabilityMeshShadingEXT);
+                    builder.addExtension(spv::E_SPV_EXT_mesh_shader);
+                } else {
+                    builder.addCapability(spv::CapabilityMeshShadingNV);
+                    builder.addExtension(spv::E_SPV_NV_mesh_shader);
+                }
             }
             builder.addMemberDecoration(id, (unsigned)member, spv::DecorationPerPrimitiveNV);
         }
@@ -8884,8 +9115,13 @@
             // Need to add capability/extension for fragment shader.
             // Mesh shader already adds this by default.
             if (glslangIntermediate->getStage() == EShLangFragment) {
-                builder.addCapability(spv::CapabilityMeshShadingNV);
-                builder.addExtension(spv::E_SPV_NV_mesh_shader);
+                if(isMeshShaderExt) {
+                    builder.addCapability(spv::CapabilityMeshShadingEXT);
+                    builder.addExtension(spv::E_SPV_EXT_mesh_shader);
+                } else {
+                    builder.addCapability(spv::CapabilityMeshShadingNV);
+                    builder.addExtension(spv::E_SPV_NV_mesh_shader);
+                }
             }
             builder.addDecoration(id, spv::DecorationPerPrimitiveNV);
         }
@@ -9025,15 +9261,19 @@
                 break;
 #ifndef GLSLANG_WEB
             case glslang::EbtInt8:
+                builder.addCapability(spv::CapabilityInt8);
                 spvConsts.push_back(builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const()));
                 break;
             case glslang::EbtUint8:
+                builder.addCapability(spv::CapabilityInt8);
                 spvConsts.push_back(builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const()));
                 break;
             case glslang::EbtInt16:
+                builder.addCapability(spv::CapabilityInt16);
                 spvConsts.push_back(builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const()));
                 break;
             case glslang::EbtUint16:
+                builder.addCapability(spv::CapabilityInt16);
                 spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const()));
                 break;
             case glslang::EbtInt64:
@@ -9046,6 +9286,7 @@
                 spvConsts.push_back(builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst()));
                 break;
             case glslang::EbtFloat16:
+                builder.addCapability(spv::CapabilityFloat16);
                 spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
                 break;
 #endif
@@ -9074,15 +9315,19 @@
             break;
 #ifndef GLSLANG_WEB
         case glslang::EbtInt8:
+            builder.addCapability(spv::CapabilityInt8);
             scalar = builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const(), specConstant);
             break;
         case glslang::EbtUint8:
+            builder.addCapability(spv::CapabilityInt8);
             scalar = builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const(), specConstant);
             break;
         case glslang::EbtInt16:
+            builder.addCapability(spv::CapabilityInt16);
             scalar = builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const(), specConstant);
             break;
         case glslang::EbtUint16:
+            builder.addCapability(spv::CapabilityInt16);
             scalar = builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const(), specConstant);
             break;
         case glslang::EbtInt64:
@@ -9095,6 +9340,7 @@
             scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst(), specConstant);
             break;
         case glslang::EbtFloat16:
+            builder.addCapability(spv::CapabilityFloat16);
             scalar = builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
             break;
         case glslang::EbtReference:
@@ -9292,7 +9538,8 @@
     // return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent
     // return 8; // switch to new dead block eliminator; use OpUnreachable
     // return 9; // don't include opaque function parameters in OpEntryPoint global's operand list
-    return 10; // Generate OpFUnordNotEqual for != comparisons
+    // return 10; // Generate OpFUnordNotEqual for != comparisons
+    return 11; // Make OpEmitMeshTasksEXT a terminal instruction
 }
 
 // Write SPIR-V out to a binary file
diff --git a/SPIRV/NonSemanticShaderDebugInfo100.h b/SPIRV/NonSemanticShaderDebugInfo100.h
new file mode 100644
index 0000000..c52f32f
--- /dev/null
+++ b/SPIRV/NonSemanticShaderDebugInfo100.h
@@ -0,0 +1,171 @@
+// Copyright (c) 2018 The Khronos Group Inc.
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and/or associated documentation files (the "Materials"),
+// to deal in the Materials without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Materials, and to permit persons to whom the
+// Materials are furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Materials.
+// 
+// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+// 
+// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
+// IN THE MATERIALS.
+
+#ifndef SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_
+#define SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum {
+    NonSemanticShaderDebugInfo100Version = 100,
+    NonSemanticShaderDebugInfo100Version_BitWidthPadding = 0x7fffffff
+};
+enum {
+    NonSemanticShaderDebugInfo100Revision = 6,
+    NonSemanticShaderDebugInfo100Revision_BitWidthPadding = 0x7fffffff
+};
+
+enum NonSemanticShaderDebugInfo100Instructions {
+    NonSemanticShaderDebugInfo100DebugInfoNone = 0,
+    NonSemanticShaderDebugInfo100DebugCompilationUnit = 1,
+    NonSemanticShaderDebugInfo100DebugTypeBasic = 2,
+    NonSemanticShaderDebugInfo100DebugTypePointer = 3,
+    NonSemanticShaderDebugInfo100DebugTypeQualifier = 4,
+    NonSemanticShaderDebugInfo100DebugTypeArray = 5,
+    NonSemanticShaderDebugInfo100DebugTypeVector = 6,
+    NonSemanticShaderDebugInfo100DebugTypedef = 7,
+    NonSemanticShaderDebugInfo100DebugTypeFunction = 8,
+    NonSemanticShaderDebugInfo100DebugTypeEnum = 9,
+    NonSemanticShaderDebugInfo100DebugTypeComposite = 10,
+    NonSemanticShaderDebugInfo100DebugTypeMember = 11,
+    NonSemanticShaderDebugInfo100DebugTypeInheritance = 12,
+    NonSemanticShaderDebugInfo100DebugTypePtrToMember = 13,
+    NonSemanticShaderDebugInfo100DebugTypeTemplate = 14,
+    NonSemanticShaderDebugInfo100DebugTypeTemplateParameter = 15,
+    NonSemanticShaderDebugInfo100DebugTypeTemplateTemplateParameter = 16,
+    NonSemanticShaderDebugInfo100DebugTypeTemplateParameterPack = 17,
+    NonSemanticShaderDebugInfo100DebugGlobalVariable = 18,
+    NonSemanticShaderDebugInfo100DebugFunctionDeclaration = 19,
+    NonSemanticShaderDebugInfo100DebugFunction = 20,
+    NonSemanticShaderDebugInfo100DebugLexicalBlock = 21,
+    NonSemanticShaderDebugInfo100DebugLexicalBlockDiscriminator = 22,
+    NonSemanticShaderDebugInfo100DebugScope = 23,
+    NonSemanticShaderDebugInfo100DebugNoScope = 24,
+    NonSemanticShaderDebugInfo100DebugInlinedAt = 25,
+    NonSemanticShaderDebugInfo100DebugLocalVariable = 26,
+    NonSemanticShaderDebugInfo100DebugInlinedVariable = 27,
+    NonSemanticShaderDebugInfo100DebugDeclare = 28,
+    NonSemanticShaderDebugInfo100DebugValue = 29,
+    NonSemanticShaderDebugInfo100DebugOperation = 30,
+    NonSemanticShaderDebugInfo100DebugExpression = 31,
+    NonSemanticShaderDebugInfo100DebugMacroDef = 32,
+    NonSemanticShaderDebugInfo100DebugMacroUndef = 33,
+    NonSemanticShaderDebugInfo100DebugImportedEntity = 34,
+    NonSemanticShaderDebugInfo100DebugSource = 35,
+    NonSemanticShaderDebugInfo100DebugFunctionDefinition = 101,
+    NonSemanticShaderDebugInfo100DebugSourceContinued = 102,
+    NonSemanticShaderDebugInfo100DebugLine = 103,
+    NonSemanticShaderDebugInfo100DebugNoLine = 104,
+    NonSemanticShaderDebugInfo100DebugBuildIdentifier = 105,
+    NonSemanticShaderDebugInfo100DebugStoragePath = 106,
+    NonSemanticShaderDebugInfo100DebugEntryPoint = 107,
+    NonSemanticShaderDebugInfo100DebugTypeMatrix = 108,
+    NonSemanticShaderDebugInfo100InstructionsMax = 0x7fffffff
+};
+
+
+enum NonSemanticShaderDebugInfo100DebugInfoFlags {
+    NonSemanticShaderDebugInfo100None = 0x0000,
+    NonSemanticShaderDebugInfo100FlagIsProtected = 0x01,
+    NonSemanticShaderDebugInfo100FlagIsPrivate = 0x02,
+    NonSemanticShaderDebugInfo100FlagIsPublic = 0x03,
+    NonSemanticShaderDebugInfo100FlagIsLocal = 0x04,
+    NonSemanticShaderDebugInfo100FlagIsDefinition = 0x08,
+    NonSemanticShaderDebugInfo100FlagFwdDecl = 0x10,
+    NonSemanticShaderDebugInfo100FlagArtificial = 0x20,
+    NonSemanticShaderDebugInfo100FlagExplicit = 0x40,
+    NonSemanticShaderDebugInfo100FlagPrototyped = 0x80,
+    NonSemanticShaderDebugInfo100FlagObjectPointer = 0x100,
+    NonSemanticShaderDebugInfo100FlagStaticMember = 0x200,
+    NonSemanticShaderDebugInfo100FlagIndirectVariable = 0x400,
+    NonSemanticShaderDebugInfo100FlagLValueReference = 0x800,
+    NonSemanticShaderDebugInfo100FlagRValueReference = 0x1000,
+    NonSemanticShaderDebugInfo100FlagIsOptimized = 0x2000,
+    NonSemanticShaderDebugInfo100FlagIsEnumClass = 0x4000,
+    NonSemanticShaderDebugInfo100FlagTypePassByValue = 0x8000,
+    NonSemanticShaderDebugInfo100FlagTypePassByReference = 0x10000,
+    NonSemanticShaderDebugInfo100FlagUnknownPhysicalLayout = 0x20000,
+    NonSemanticShaderDebugInfo100DebugInfoFlagsMax = 0x7fffffff
+};
+
+enum NonSemanticShaderDebugInfo100BuildIdentifierFlags {
+    NonSemanticShaderDebugInfo100IdentifierPossibleDuplicates = 0x01,
+    NonSemanticShaderDebugInfo100BuildIdentifierFlagsMax = 0x7fffffff
+};
+
+enum NonSemanticShaderDebugInfo100DebugBaseTypeAttributeEncoding {
+    NonSemanticShaderDebugInfo100Unspecified = 0,
+    NonSemanticShaderDebugInfo100Address = 1,
+    NonSemanticShaderDebugInfo100Boolean = 2,
+    NonSemanticShaderDebugInfo100Float = 3,
+    NonSemanticShaderDebugInfo100Signed = 4,
+    NonSemanticShaderDebugInfo100SignedChar = 5,
+    NonSemanticShaderDebugInfo100Unsigned = 6,
+    NonSemanticShaderDebugInfo100UnsignedChar = 7,
+    NonSemanticShaderDebugInfo100DebugBaseTypeAttributeEncodingMax = 0x7fffffff
+};
+
+enum NonSemanticShaderDebugInfo100DebugCompositeType {
+    NonSemanticShaderDebugInfo100Class = 0,
+    NonSemanticShaderDebugInfo100Structure = 1,
+    NonSemanticShaderDebugInfo100Union = 2,
+    NonSemanticShaderDebugInfo100DebugCompositeTypeMax = 0x7fffffff
+};
+
+enum NonSemanticShaderDebugInfo100DebugTypeQualifier {
+    NonSemanticShaderDebugInfo100ConstType = 0,
+    NonSemanticShaderDebugInfo100VolatileType = 1,
+    NonSemanticShaderDebugInfo100RestrictType = 2,
+    NonSemanticShaderDebugInfo100AtomicType = 3,
+    NonSemanticShaderDebugInfo100DebugTypeQualifierMax = 0x7fffffff
+};
+
+enum NonSemanticShaderDebugInfo100DebugOperation {
+    NonSemanticShaderDebugInfo100Deref = 0,
+    NonSemanticShaderDebugInfo100Plus = 1,
+    NonSemanticShaderDebugInfo100Minus = 2,
+    NonSemanticShaderDebugInfo100PlusUconst = 3,
+    NonSemanticShaderDebugInfo100BitPiece = 4,
+    NonSemanticShaderDebugInfo100Swap = 5,
+    NonSemanticShaderDebugInfo100Xderef = 6,
+    NonSemanticShaderDebugInfo100StackValue = 7,
+    NonSemanticShaderDebugInfo100Constu = 8,
+    NonSemanticShaderDebugInfo100Fragment = 9,
+    NonSemanticShaderDebugInfo100DebugOperationMax = 0x7fffffff
+};
+
+enum NonSemanticShaderDebugInfo100DebugImportedEntity {
+    NonSemanticShaderDebugInfo100ImportedModule = 0,
+    NonSemanticShaderDebugInfo100ImportedDeclaration = 1,
+    NonSemanticShaderDebugInfo100DebugImportedEntityMax = 0x7fffffff
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index 56d6d5d..6aca8cb 100644
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -160,15 +160,29 @@
     }
 
     // Is this an opcode we should remove when using --strip?
-    bool spirvbin_t::isStripOp(spv::Op opCode) const
+    bool spirvbin_t::isStripOp(spv::Op opCode, unsigned start) const
     {
         switch (opCode) {
         case spv::OpSource:
         case spv::OpSourceExtension:
         case spv::OpName:
         case spv::OpMemberName:
-        case spv::OpLine:           return true;
-        default:                    return false;
+        case spv::OpLine :
+        {
+            const std::string name = literalString(start + 2);
+
+            std::vector<std::string>::const_iterator it;
+            for (it = stripWhiteList.begin(); it < stripWhiteList.end(); it++)
+            {
+                if (name.find(*it) != std::string::npos) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+        default :
+            return false;
         }
     }
 
@@ -297,15 +311,21 @@
     std::string spirvbin_t::literalString(unsigned word) const
     {
         std::string literal;
+        const spirword_t * pos = spv.data() + word;
 
         literal.reserve(16);
 
-        const char* bytes = reinterpret_cast<const char*>(spv.data() + word);
-
-        while (bytes && *bytes)
-            literal += *bytes++;
-
-        return literal;
+        do {
+            spirword_t word = *pos;
+            for (int i = 0; i < 4; i++) {
+                char c = word & 0xff;
+                if (c == '\0')
+                    return literal;
+                literal += c;
+                word >>= 8;
+            }
+            pos++;
+        } while (true);
     }
 
     void spirvbin_t::applyMap()
@@ -366,7 +386,7 @@
         process(
             [&](spv::Op opCode, unsigned start) {
                 // remember opcodes we want to strip later
-                if (isStripOp(opCode))
+                if (isStripOp(opCode, start))
                     stripInst(start);
                 return true;
             },
@@ -1488,13 +1508,24 @@
     }
 
     // remap from a memory image
-    void spirvbin_t::remap(std::vector<std::uint32_t>& in_spv, std::uint32_t opts)
+    void spirvbin_t::remap(std::vector<std::uint32_t>& in_spv, const std::vector<std::string>& whiteListStrings,
+                           std::uint32_t opts)
     {
+        stripWhiteList = whiteListStrings;
         spv.swap(in_spv);
         remap(opts);
         spv.swap(in_spv);
     }
 
+    // remap from a memory image - legacy interface without white list
+    void spirvbin_t::remap(std::vector<std::uint32_t>& in_spv, std::uint32_t opts)
+    {
+      stripWhiteList.clear();
+      spv.swap(in_spv);
+      remap(opts);
+      spv.swap(in_spv);
+    }
+
 } // namespace SPV
 
 #endif // defined (use_cpp11)
diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h
index d6b9c34..d216946 100644
--- a/SPIRV/SPVRemapper.h
+++ b/SPIRV/SPVRemapper.h
@@ -118,6 +118,10 @@
    virtual ~spirvbin_t() { }
 
    // remap on an existing binary in memory
+   void remap(std::vector<std::uint32_t>& spv, const std::vector<std::string>& whiteListStrings,
+              std::uint32_t opts = DO_EVERYTHING);
+
+   // remap on an existing binary in memory - legacy interface without white list
    void remap(std::vector<std::uint32_t>& spv, std::uint32_t opts = DO_EVERYTHING);
 
    // Type for error/log handler functions
@@ -180,6 +184,8 @@
    unsigned typeSizeInWords(spv::Id id)    const;
    unsigned idTypeSizeInWords(spv::Id id)  const;
 
+   bool isStripOp(spv::Op opCode, unsigned start) const;
+
    spv::Id&        asId(unsigned word)                { return spv[word]; }
    const spv::Id&  asId(unsigned word)          const { return spv[word]; }
    spv::Op         asOpCode(unsigned word)      const { return opOpCode(spv[word]); }
@@ -249,6 +255,8 @@
 
    std::vector<spirword_t> spv;      // SPIR words
 
+   std::vector<std::string> stripWhiteList;
+
    namemap_t               nameMap;  // ID names from OpName
 
    // Since we want to also do binary ops, we can't use std::vector<bool>.  we could use
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index e83306e..7c5ea87 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -59,12 +59,15 @@
 
 Builder::Builder(unsigned int spvVersion, unsigned int magicNumber, SpvBuildLogger* buildLogger) :
     spvVersion(spvVersion),
-    source(SourceLanguageUnknown),
+    sourceLang(SourceLanguageUnknown),
     sourceVersion(0),
     sourceFileStringId(NoResult),
     currentLine(0),
     currentFile(nullptr),
+    currentFileId(NoResult),
+    lastDebugScopeId(NoResult),
     emitOpLines(false),
+    emitNonSemanticShaderDebugInfo(false),
     addressModel(AddressingModelLogical),
     memoryModel(MemoryModelGLSL450),
     builderNumber(magicNumber),
@@ -98,8 +101,12 @@
 {
     if (lineNum != 0 && lineNum != currentLine) {
         currentLine = lineNum;
-        if (emitOpLines)
-            addLine(sourceFileStringId, currentLine, 0);
+        if (emitOpLines) {
+          if (emitNonSemanticShaderDebugInfo)
+              addDebugScopeAndLine(currentFileId, currentLine, 0);
+          else
+              addLine(sourceFileStringId, currentLine, 0);
+        }
     }
 }
 
@@ -118,7 +125,10 @@
         currentFile = filename;
         if (emitOpLines) {
             spv::Id strId = getStringId(filename);
-            addLine(strId, currentLine, 0);
+            if (emitNonSemanticShaderDebugInfo)
+                addDebugScopeAndLine(strId, currentLine, 0);
+            else
+                addLine(strId, currentLine, 0);
         }
     }
 }
@@ -132,22 +142,49 @@
     buildPoint->addInstruction(std::unique_ptr<Instruction>(line));
 }
 
+void Builder::addDebugScopeAndLine(Id fileName, int lineNum, int column)
+{
+    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()
 {
     Instruction* type;
     if (groupedTypes[OpTypeVoid].size() == 0) {
-        type = new Instruction(getUniqueId(), NoType, OpTypeVoid);
+        Id typeId = getUniqueId();
+        type = new Instruction(typeId, NoType, OpTypeVoid);
         groupedTypes[OpTypeVoid].push_back(type);
         constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
         module.mapInstruction(type);
+        // Core OpTypeVoid used for debug void type
+        if (emitNonSemanticShaderDebugInfo)
+            debugId[typeId] = typeId;
     } else
         type = groupedTypes[OpTypeVoid].back();
 
     return type->getResultId();
 }
 
-Id Builder::makeBoolType()
+Id Builder::makeBoolType(bool const compilerGenerated)
 {
     Instruction* type;
     if (groupedTypes[OpTypeBool].size() == 0) {
@@ -158,6 +195,12 @@
     } else
         type = groupedTypes[OpTypeBool].back();
 
+    if (emitNonSemanticShaderDebugInfo && !compilerGenerated)
+    {
+        auto const debugResultId = makeBoolDebugType(32);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -172,6 +215,12 @@
     } else
         type = groupedTypes[OpTypeSampler].back();
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        auto const debugResultId = makeCompositeDebugType({}, "type.sampler", NonSemanticShaderDebugInfo100Structure, true);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -268,6 +317,12 @@
         break;
     }
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        auto const debugResultId = makeIntegerDebugType(width, hasSign);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -305,6 +360,12 @@
         break;
     }
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        auto const debugResultId = makeFloatDebugType(width);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -312,7 +373,7 @@
 // See makeStructResultType() for non-decorated structs
 // needed as the result of some instructions, which does
 // check for duplicates.
-Id Builder::makeStructType(const std::vector<Id>& members, const char* name)
+Id Builder::makeStructType(const std::vector<Id>& members, const char* name, bool const compilerGenerated)
 {
     // Don't look for previous one, because in the general case,
     // structs can be duplicated except for decorations.
@@ -326,6 +387,12 @@
     module.mapInstruction(type);
     addName(type->getResultId(), name);
 
+    if (emitNonSemanticShaderDebugInfo && !compilerGenerated)
+    {
+        auto const debugResultId = makeCompositeDebugType(members, name, NonSemanticShaderDebugInfo100Structure);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -372,6 +439,12 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        auto const debugResultId = makeVectorDebugType(component, size);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -398,6 +471,12 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        auto const debugResultId = makeMatrixDebugType(column, cols);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -427,6 +506,37 @@
     return type->getResultId();
 }
 
+Id Builder::makeGenericType(spv::Op opcode, std::vector<spv::IdImmediate>& operands)
+{
+    // try to find it
+    Instruction* type;
+    for (int t = 0; t < (int)groupedTypes[opcode].size(); ++t) {
+        type = groupedTypes[opcode][t];
+        if (static_cast<size_t>(type->getNumOperands()) != operands.size())
+            continue; // Number mismatch, find next
+
+        bool match = true;
+        for (int op = 0; match && op < (int)operands.size(); ++op) {
+            match = (operands[op].isId ? type->getIdOperand(op) : type->getImmediateOperand(op)) == operands[op].word;
+        }
+        if (match)
+            return type->getResultId();
+    }
+
+    // not found, make it
+    type = new Instruction(getUniqueId(), NoType, opcode);
+    for (size_t op = 0; op < operands.size(); ++op) {
+        if (operands[op].isId)
+            type->addIdOperand(operands[op].word);
+        else
+            type->addImmediateOperand(operands[op].word);
+    }
+    groupedTypes[opcode].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
 
 // TODO: performance: track arrays per stride
 // If a stride is supplied (non-zero) make an array.
@@ -453,6 +563,12 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        auto const debugResultId = makeArrayDebugType(element, sizeId);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -463,6 +579,12 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        auto const debugResultId = makeArrayDebugType(element, makeUintConstant(0));
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -482,11 +604,25 @@
             }
         }
         if (! mismatch)
+        {
+            // If compiling HLSL, glslang will create a wrapper function around the entrypoint. Accordingly, a void(void)
+            // function type is created for the wrapper function. However, nonsemantic shader debug information is disabled
+            // while creating the HLSL wrapper. Consequently, if we encounter another void(void) function, we need to create
+            // the associated debug function type if it hasn't been created yet.
+            if(emitNonSemanticShaderDebugInfo && debugId[type->getResultId()] == 0) {
+                assert(sourceLang == spv::SourceLanguageHLSL);
+                assert(getTypeClass(returnType) == OpTypeVoid && paramTypes.size() == 0);
+
+                Id debugTypeId = makeDebugFunctionType(returnType, {});
+                debugId[type->getResultId()] = debugTypeId;
+            }
             return type->getResultId();
+        }
     }
 
     // not found, make it
-    type = new Instruction(getUniqueId(), NoType, OpTypeFunction);
+    Id typeId = getUniqueId();
+    type = new Instruction(typeId, NoType, OpTypeFunction);
     type->addIdOperand(returnType);
     for (int p = 0; p < (int)paramTypes.size(); ++p)
         type->addIdOperand(paramTypes[p]);
@@ -494,9 +630,34 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    // make debug type and map it
+    if (emitNonSemanticShaderDebugInfo) {
+        Id debugTypeId = makeDebugFunctionType(returnType, paramTypes);
+        debugId[typeId] = debugTypeId;
+    }
+
     return type->getResultId();
 }
 
+Id Builder::makeDebugFunctionType(Id returnType, const std::vector<Id>& paramTypes)
+{
+    assert(debugId[returnType] != 0);
+
+    Id typeId = getUniqueId();
+    auto type = new Instruction(typeId, makeVoidType(), OpExtInst);
+    type->addIdOperand(nonSemanticShaderDebugInfo);
+    type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeFunction);
+    type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic));
+    type->addIdOperand(debugId[returnType]);
+    for (auto const paramType : paramTypes) {
+        assert(isPointerType(paramType) || isArrayType(paramType));
+        type->addIdOperand(debugId[getContainedTypeId(paramType)]);
+    }
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+    return typeId;
+}
+
 Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled,
     ImageFormat format)
 {
@@ -578,6 +739,22 @@
     }
 #endif
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        auto TypeName = [&dim]() -> char const* {
+            switch (dim) {
+                case Dim1D: return "type.1d.image";
+                case Dim2D: return "type.2d.image";
+                case Dim3D: return "type.3d.image";
+                case DimCube: return "type.cube.image";
+                default: return "type.image";
+            }
+        };
+
+        auto const debugResultId = makeCompositeDebugType({}, TypeName(), NonSemanticShaderDebugInfo100Class, true);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -599,9 +776,376 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        auto const debugResultId = makeCompositeDebugType({}, "type.sampled.image", NonSemanticShaderDebugInfo100Class, true);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
+Id Builder::makeDebugInfoNone()
+{
+    if (debugInfoNone != 0)
+        return debugInfoNone;
+
+    Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    inst->addIdOperand(nonSemanticShaderDebugInfo);
+    inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugInfoNone);
+
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(inst));
+    module.mapInstruction(inst);
+
+    debugInfoNone = inst->getResultId();
+
+    return debugInfoNone;
+}
+
+Id Builder::makeBoolDebugType(int const size)
+{
+    // try to find it
+    Instruction* type;
+    for (int t = 0; t < (int)groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].size(); ++t) {
+        type = groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic][t];
+        if (type->getIdOperand(0) == getStringId("bool") &&
+            type->getIdOperand(1) == static_cast<unsigned int>(size) &&
+            type->getIdOperand(2) == NonSemanticShaderDebugInfo100Boolean)
+            return type->getResultId();
+    }
+
+    type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->addIdOperand(nonSemanticShaderDebugInfo);
+    type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic);
+
+    type->addIdOperand(getStringId("bool")); // name id
+    type->addIdOperand(makeUintConstant(size)); // size id
+    type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100Boolean)); // encoding id
+    type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100None)); // flags id
+
+    groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
+
+Id Builder::makeIntegerDebugType(int const width, bool const hasSign)
+{
+    // try to find it
+    Instruction* type;
+    for (int t = 0; t < (int)groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].size(); ++t) {
+        type = groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic][t];
+        if (type->getIdOperand(0) == (hasSign ? getStringId("int") : getStringId("uint")) &&
+            type->getIdOperand(1) == static_cast<unsigned int>(width) &&
+            type->getIdOperand(2) == (hasSign ? NonSemanticShaderDebugInfo100Signed : NonSemanticShaderDebugInfo100Unsigned))
+            return type->getResultId();
+    }
+
+    // not found, make it
+    type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->addIdOperand(nonSemanticShaderDebugInfo);
+    type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic);
+    if(hasSign == true) {
+        type->addIdOperand(getStringId("int")); // name id
+    } else {
+        type->addIdOperand(getStringId("uint")); // name id
+    }
+    type->addIdOperand(makeUintConstant(width)); // size id
+    if(hasSign == true) {
+        type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100Signed)); // encoding id
+    } else {
+        type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100Unsigned)); // encoding id
+    }
+    type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100None)); // flags id
+
+    groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
+
+Id Builder::makeFloatDebugType(int const width)
+{
+    // try to find it
+    Instruction* type;
+    for (int t = 0; t < (int)groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].size(); ++t) {
+        type = groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic][t];
+        if (type->getIdOperand(0) == getStringId("float") &&
+            type->getIdOperand(1) == static_cast<unsigned int>(width) &&
+            type->getIdOperand(2) == NonSemanticShaderDebugInfo100Float)
+            return type->getResultId();
+    }
+
+    // not found, make it
+    type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->addIdOperand(nonSemanticShaderDebugInfo);
+    type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic);
+    type->addIdOperand(getStringId("float")); // name id
+    type->addIdOperand(makeUintConstant(width)); // size id
+    type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100Float)); // encoding id
+    type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100None)); // flags id
+
+    groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
+
+Id Builder::makeSequentialDebugType(Id const baseType, Id const componentCount, NonSemanticShaderDebugInfo100Instructions const sequenceType)
+{
+    assert(sequenceType == NonSemanticShaderDebugInfo100DebugTypeArray ||
+        sequenceType == NonSemanticShaderDebugInfo100DebugTypeVector);
+
+    // try to find it
+    Instruction* type;
+    for (int t = 0; t < (int)groupedDebugTypes[sequenceType].size(); ++t) {
+        type = groupedDebugTypes[sequenceType][t];
+        if (type->getIdOperand(0) == baseType &&
+            type->getIdOperand(1) == makeUintConstant(componentCount))
+            return type->getResultId();
+    }
+
+    // not found, make it
+    type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->addIdOperand(nonSemanticShaderDebugInfo);
+    type->addImmediateOperand(sequenceType);
+    type->addIdOperand(debugId[baseType]); // base type
+    type->addIdOperand(componentCount); // component count
+
+    groupedDebugTypes[sequenceType].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
+
+Id Builder::makeArrayDebugType(Id const baseType, Id const componentCount)
+{
+    return makeSequentialDebugType(baseType, componentCount, NonSemanticShaderDebugInfo100DebugTypeArray);
+}
+
+Id Builder::makeVectorDebugType(Id const baseType, int const componentCount)
+{
+    return makeSequentialDebugType(baseType, makeUintConstant(componentCount), NonSemanticShaderDebugInfo100DebugTypeVector);;
+}
+
+Id Builder::makeMatrixDebugType(Id const vectorType, int const vectorCount, bool columnMajor)
+{
+    // try to find it
+    Instruction* type;
+    for (int t = 0; t < (int)groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeMatrix].size(); ++t) {
+        type = groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeMatrix][t];
+        if (type->getIdOperand(0) == vectorType &&
+            type->getIdOperand(1) == makeUintConstant(vectorCount))
+            return type->getResultId();
+    }
+
+    // not found, make it
+    type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->addIdOperand(nonSemanticShaderDebugInfo);
+    type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeMatrix);
+    type->addIdOperand(debugId[vectorType]); // vector type id
+    type->addIdOperand(makeUintConstant(vectorCount)); // component count id
+    type->addIdOperand(makeBoolConstant(columnMajor)); // column-major id
+
+    groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeMatrix].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
+
+Id Builder::makeMemberDebugType(Id const memberType, DebugTypeLoc const& debugTypeLoc)
+{
+    assert(debugId[memberType] != 0);
+
+    Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    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(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
+    type->addIdOperand(makeUintConstant(0)); // TODO: size id
+    type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic)); // flags id
+
+    groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeMember].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
+
+// Note: To represent a source language opaque type, this instruction must have no Members operands, Size operand must be
+// DebugInfoNone, and Name must start with @ to avoid clashes with user defined names.
+Id Builder::makeCompositeDebugType(std::vector<Id> const& memberTypes, char const*const name,
+    NonSemanticShaderDebugInfo100DebugCompositeType const tag, bool const isOpaqueType)
+{
+    // Create the debug member types.
+    std::vector<Id> memberDebugTypes;
+    for(auto const memberType : memberTypes) {
+        assert(debugTypeLocs.find(memberType) != debugTypeLocs.end());
+
+        memberDebugTypes.emplace_back(makeMemberDebugType(memberType, debugTypeLocs[memberType]));
+
+        // TODO: Need to rethink this method of passing location information.
+        // debugTypeLocs.erase(memberType);
+    }
+
+    // Create The structure debug type.
+    Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    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(makeUintConstant(currentLine)); // line id TODO: currentLine always zero?
+    type->addIdOperand(makeUintConstant(0)); // TODO: column id
+    type->addIdOperand(makeDebugCompilationUnit()); // scope id
+    if(isOpaqueType == true) {
+        // Prepend '@' to opaque types.
+        type->addIdOperand(getStringId('@' + std::string(name))); // linkage name id
+        type->addIdOperand(makeDebugInfoNone()); // size id
+    } else {
+        type->addIdOperand(getStringId(name)); // linkage name id
+        type->addIdOperand(makeUintConstant(0)); // TODO: size id
+    }
+    type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic)); // flags id
+    assert(isOpaqueType == false || (isOpaqueType == true && memberDebugTypes.empty()));
+    for(auto const memberDebugType : memberDebugTypes) {
+        type->addIdOperand(memberDebugType);
+    }
+
+    groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeComposite].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->addIdOperand(nonSemanticShaderDebugInfo);
+    sourceInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugSource);
+    sourceInst->addIdOperand(fileName);
+    if (emitNonSemanticShaderDebugSource) {
+        spv::Id sourceId = 0;
+        if (fileName == sourceFileStringId) {
+            sourceId = getStringId(sourceText);
+        } else {
+            auto incItr = includeFiles.find(fileName);
+            assert(incItr != includeFiles.end());
+            sourceId = getStringId(*incItr->second);
+        }
+        sourceInst->addIdOperand(sourceId);
+    }
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(sourceInst));
+    module.mapInstruction(sourceInst);
+    debugSourceId[fileName] = resultId;
+    return resultId;
+}
+
+Id Builder::makeDebugCompilationUnit() {
+    if (nonSemanticShaderCompilationUnitId != 0)
+        return nonSemanticShaderCompilationUnitId;
+    spv::Id resultId = getUniqueId();
+    Instruction* sourceInst = new Instruction(resultId, makeVoidType(), OpExtInst);
+    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(makeUintConstant(sourceLang));
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(sourceInst));
+    module.mapInstruction(sourceInst);
+    nonSemanticShaderCompilationUnitId = resultId;
+    return resultId;
+}
+
+Id Builder::createDebugGlobalVariable(Id const type, char const*const name, Id const variable)
+{
+    assert(type != 0);
+
+    Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    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(makeUintConstant(currentLine)); // line id TODO: currentLine always zero?
+    inst->addIdOperand(makeUintConstant(0)); // TODO: column id
+    inst->addIdOperand(makeDebugCompilationUnit()); // scope id
+    inst->addIdOperand(getStringId(name)); // linkage name id
+    inst->addIdOperand(variable); // variable id
+    inst->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsDefinition)); // flags id
+
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(inst));
+    module.mapInstruction(inst);
+
+    return inst->getResultId();
+}
+
+Id Builder::createDebugLocalVariable(Id type, char const*const name, size_t const argNumber)
+{
+    assert(name != nullptr);
+    Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    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(makeUintConstant(currentLine)); // line id
+    inst->addIdOperand(makeUintConstant(0)); // TODO: column id
+    inst->addIdOperand(currentDebugScopeId.top()); // scope id
+    inst->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsLocal)); // flags id
+    if(argNumber != 0) {
+        inst->addIdOperand(makeUintConstant(argNumber));
+    }
+
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(inst));
+    module.mapInstruction(inst);
+
+    return inst->getResultId();
+}
+
+Id Builder::makeDebugExpression()
+{
+    if (debugExpression != 0)
+        return debugExpression;
+
+    Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    inst->addIdOperand(nonSemanticShaderDebugInfo);
+    inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugExpression);
+
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(inst));
+    module.mapInstruction(inst);
+
+    debugExpression = inst->getResultId();
+
+    return debugExpression;
+}
+
+Id Builder::makeDebugDeclare(Id const debugLocalVariable, Id const localVariable)
+{
+    Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    inst->addIdOperand(nonSemanticShaderDebugInfo);
+    inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugDeclare);
+    inst->addIdOperand(debugLocalVariable); // debug local variable id
+    inst->addIdOperand(localVariable); // local variable id
+    inst->addIdOperand(makeDebugExpression()); // expression id
+    buildPoint->addInstruction(std::unique_ptr<Instruction>(inst));
+
+    return inst->getResultId();
+}
+
 #ifndef GLSLANG_WEB
 Id Builder::makeAccelerationStructureType()
 {
@@ -889,6 +1433,17 @@
     }
 }
 
+bool Builder::isRayTracingOpCode(Op opcode) const
+{
+    switch (opcode) {
+    case OpTypeAccelerationStructureKHR:
+    case OpTypeRayQueryKHR:
+        return true;
+    default:
+        return false;
+    }
+}
+
 Id Builder::makeNullConstant(Id typeId)
 {
     Instruction* constant;
@@ -1105,6 +1660,19 @@
     return NoResult;
 }
 
+Id Builder::importNonSemanticShaderDebugInfoInstructions()
+{
+    assert(emitNonSemanticShaderDebugInfo == true);
+
+    if(nonSemanticShaderDebugInfo == 0)
+    {
+        this->addExtension(spv::E_SPV_KHR_non_semantic_info);
+        nonSemanticShaderDebugInfo = this->import("NonSemantic.Shader.DebugInfo.100");
+    }
+
+    return nonSemanticShaderDebugInfo;
+}
+
 Id Builder::findCompositeConstant(Op typeClass, Id typeId, const std::vector<Id>& comps)
 {
     Instruction* constant = 0;
@@ -1416,23 +1984,34 @@
     assert(! entryPointFunction);
 
     Block* entry;
-    std::vector<Id> params;
+    std::vector<Id> paramsTypes;
+    std::vector<char const*> paramNames;
     std::vector<std::vector<Decoration>> decorations;
 
-    entryPointFunction = makeFunctionEntry(NoPrecision, makeVoidType(), entryPoint, params, decorations, &entry);
+    auto const returnType = makeVoidType();
+
+    restoreNonSemanticShaderDebugInfo = emitNonSemanticShaderDebugInfo;
+    if(sourceLang == spv::SourceLanguageHLSL) {
+        emitNonSemanticShaderDebugInfo = false;
+    }
+
+    entryPointFunction = makeFunctionEntry(NoPrecision, returnType, entryPoint, paramsTypes, paramNames, decorations, &entry);
+
+    emitNonSemanticShaderDebugInfo = restoreNonSemanticShaderDebugInfo;
 
     return entryPointFunction;
 }
 
 // Comments in header
 Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const char* name,
-                                     const std::vector<Id>& paramTypes,
+                                     const std::vector<Id>& paramTypes, const std::vector<char const*>& paramNames,
                                      const std::vector<std::vector<Decoration>>& decorations, Block **entry)
 {
     // Make the function and initial instructions in it
     Id typeId = makeFunctionType(returnType, paramTypes);
     Id firstParamId = paramTypes.size() == 0 ? 0 : getUniqueIds((int)paramTypes.size());
-    Function* function = new Function(getUniqueId(), returnType, typeId, firstParamId, module);
+    Id funcId = getUniqueId();
+    Function* function = new Function(funcId, returnType, typeId, firstParamId, module);
 
     // Set up the precisions
     setPrecision(function->getId(), precision);
@@ -1444,11 +2023,39 @@
         }
     }
 
+    // Make the debug function instruction
+    if (emitNonSemanticShaderDebugInfo) {
+        Id nameId = getStringId(unmangleFunctionName(name));
+        Id debugFuncId = makeDebugFunction(function, nameId, typeId);
+        debugId[funcId] = debugFuncId;
+        currentDebugScopeId.push(debugFuncId);
+        lastDebugScopeId = NoResult;
+    }
+
     // CFG
-    if (entry) {
-        *entry = new Block(getUniqueId(), *function);
-        function->addBlock(*entry);
-        setBuildPoint(*entry);
+    assert(entry != nullptr);
+    *entry = new Block(getUniqueId(), *function);
+    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 const& paramType = paramTypes[p];
+            assert(isPointerType(paramType) || isArrayType(paramType));
+            assert(debugId[getContainedTypeId(paramType)] != 0);
+            auto const& paramName = paramNames[p];
+            auto const debugLocalVariableId = createDebugLocalVariable(debugId[getContainedTypeId(paramType)], paramName, p+1);
+            debugId[firstParamId + p] = debugLocalVariableId;
+
+            makeDebugDeclare(debugLocalVariableId, firstParamId + p);
+        }
     }
 
     if (name)
@@ -1456,9 +2063,62 @@
 
     functions.push_back(std::unique_ptr<Function>(function));
 
+    // Clear debug scope stack
+    if (emitNonSemanticShaderDebugInfo)
+        currentDebugScopeId.pop();
+
     return function;
 }
 
+Id Builder::makeDebugFunction(Function* function, Id nameId, Id funcTypeId) {
+    assert(function != nullptr);
+    assert(nameId != 0);
+    assert(funcTypeId != 0);
+    assert(debugId[funcTypeId] != 0);
+
+    Id funcId = getUniqueId();
+    auto type = new Instruction(funcId, makeVoidType(), OpExtInst);
+    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(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
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+    return funcId;
+}
+
+Id Builder::makeDebugLexicalBlock(uint32_t line) {
+    Id lexId = getUniqueId();
+    auto lex = new Instruction(lexId, makeVoidType(), OpExtInst);
+    lex->addIdOperand(nonSemanticShaderDebugInfo);
+    lex->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLexicalBlock);
+    lex->addIdOperand(makeDebugSource(currentFileId));
+    lex->addIdOperand(makeUintConstant(line));
+    lex->addIdOperand(makeUintConstant(0)); // column
+    lex->addIdOperand(currentDebugScopeId.top()); // scope
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(lex));
+    module.mapInstruction(lex);
+    return lexId;
+}
+
+std::string Builder::unmangleFunctionName(std::string const& name) const
+{
+    assert(name.length() > 0);
+
+    if(name.rfind('(') != std::string::npos) {
+        return name.substr(0, name.rfind('('));
+    } else {
+        return name;
+    }
+}
+
 // Comments in header
 void Builder::makeReturn(bool implicit, Id retVal)
 {
@@ -1474,6 +2134,48 @@
 }
 
 // Comments in header
+void Builder::enterScope(uint32_t line)
+{
+    // Generate new lexical scope debug instruction
+    Id lexId = makeDebugLexicalBlock(line);
+    currentDebugScopeId.push(lexId);
+    lastDebugScopeId = NoResult;
+}
+
+// Comments in header
+void Builder::leaveScope()
+{
+    // Pop current scope from stack and clear current scope
+    currentDebugScopeId.pop();
+    lastDebugScopeId = NoResult;
+}
+
+// Comments in header
+void Builder::enterFunction(Function const* function)
+{
+    // Save and disable debugInfo for HLSL entry point function. It is a wrapper
+    // function with no user code in it.
+    restoreNonSemanticShaderDebugInfo = emitNonSemanticShaderDebugInfo;
+    if (sourceLang == spv::SourceLanguageHLSL && function == entryPointFunction) {
+        emitNonSemanticShaderDebugInfo = false;
+    }
+
+    if (emitNonSemanticShaderDebugInfo) {
+        // Initialize scope state
+        Id funcId = function->getFuncId();
+        currentDebugScopeId.push(debugId[funcId]);
+        // Create DebugFunctionDefinition
+        spv::Id resultId = getUniqueId();
+        Instruction* defInst = new Instruction(resultId, makeVoidType(), OpExtInst);
+        defInst->addIdOperand(nonSemanticShaderDebugInfo);
+        defInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugFunctionDefinition);
+        defInst->addIdOperand(debugId[funcId]);
+        defInst->addIdOperand(funcId);
+        buildPoint->addInstruction(std::unique_ptr<Instruction>(defInst));
+    }
+}
+
+// Comments in header
 void Builder::leaveFunction()
 {
     Block* block = buildPoint;
@@ -1488,6 +2190,12 @@
             makeReturn(true, createUndefined(function.getReturnType()));
         }
     }
+
+    // Clear function scope from debug scope stack
+    if (emitNonSemanticShaderDebugInfo)
+        currentDebugScopeId.pop();
+
+    emitNonSemanticShaderDebugInfo = restoreNonSemanticShaderDebugInfo;
 }
 
 // Comments in header
@@ -1498,7 +2206,18 @@
 }
 
 // Comments in header
-Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name, Id initializer)
+void Builder::makeStatementTerminator(spv::Op opcode, const std::vector<Id>& operands, const char* name)
+{
+    // It's assumed that the terminator instruction is always of void return type
+    // However in future if there is a need for non void return type, new helper
+    // methods can be created.
+    createNoResultOp(opcode, operands);
+    createAndSetNoPredecessorBlock(name);
+}
+
+// Comments in header
+Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name, Id initializer,
+    bool const compilerGenerated)
 {
     Id pointerType = makePointer(storageClass, type);
     Instruction* inst = new Instruction(getUniqueId(), pointerType, OpVariable);
@@ -1510,11 +2229,26 @@
     case StorageClassFunction:
         // Validation rules require the declaration in the entry block
         buildPoint->getParent().addLocalVariable(std::unique_ptr<Instruction>(inst));
+
+        if (emitNonSemanticShaderDebugInfo && !compilerGenerated)
+        {
+            auto const debugLocalVariableId = createDebugLocalVariable(debugId[type], name);
+            debugId[inst->getResultId()] = debugLocalVariableId;
+
+            makeDebugDeclare(debugLocalVariableId, inst->getResultId());
+        }
+
         break;
 
     default:
         constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(inst));
         module.mapInstruction(inst);
+
+        if (emitNonSemanticShaderDebugInfo && !isRayTracingOpCode(getOpCode(type)))
+        {
+            auto const debugResultId = createDebugGlobalVariable(debugId[type], name, inst->getResultId());
+            debugId[inst->getResultId()] = debugResultId;
+        }
         break;
     }
 
@@ -1544,7 +2278,7 @@
     case spv::StorageClassPhysicalStorageBufferEXT:
         break;
     default:
-        memoryAccess = spv::MemoryAccessMask(memoryAccess & 
+        memoryAccess = spv::MemoryAccessMask(memoryAccess &
                         ~(spv::MemoryAccessMakePointerAvailableKHRMask |
                           spv::MemoryAccessMakePointerVisibleKHRMask |
                           spv::MemoryAccessNonPrivatePointerKHRMask));
@@ -2020,7 +2754,7 @@
         texArgs[numArgs++] = parameters.granularity;
     if (parameters.coarse != NoResult)
         texArgs[numArgs++] = parameters.coarse;
-#endif 
+#endif
 
     //
     // Set up the optional arguments
@@ -3240,10 +3974,10 @@
     const int opSourceWordCount = 4;
     const int nonNullBytesPerInstruction = 4 * (maxWordCount - opSourceWordCount) - 1;
 
-    if (source != SourceLanguageUnknown) {
+    if (sourceLang != SourceLanguageUnknown) {
         // OpSource Language Version File Source
         Instruction sourceInst(NoResult, NoType, OpSource);
-        sourceInst.addImmediateOperand(source);
+        sourceInst.addImmediateOperand(sourceLang);
         sourceInst.addImmediateOperand(sourceVersion);
         // File operand
         if (fileId != NoResult) {
@@ -3276,6 +4010,7 @@
 // Dump an OpSource[Continued] sequence for the source and every include file
 void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
 {
+    if (emitNonSemanticShaderDebugInfo) return;
     dumpSourceInstructions(sourceFileStringId, sourceText, out);
     for (auto iItr = includeFiles.begin(); iItr != includeFiles.end(); ++iItr)
         dumpSourceInstructions(iItr->first, *iItr->second, out);
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 251b9ee..f7fdc6a 100644
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -50,6 +50,10 @@
 #include "Logger.h"
 #include "spirv.hpp"
 #include "spvIR.h"
+namespace spv {
+    #include "GLSL.ext.KHR.h"
+    #include "NonSemanticShaderDebugInfo100.h"
+}
 
 #include <algorithm>
 #include <map>
@@ -82,7 +86,7 @@
 
     void setSource(spv::SourceLanguage lang, int version)
     {
-        source = lang;
+        sourceLang = lang;
         sourceVersion = version;
     }
     spv::Id getStringId(const std::string& str)
@@ -99,14 +103,32 @@
         stringIds[file_c_str] = strId;
         return strId;
     }
+    spv::Id getSourceFile() const 
+    {
+        return sourceFileStringId;
+    }
     void setSourceFile(const std::string& file)
     {
         sourceFileStringId = getStringId(file);
+        currentFileId = sourceFileStringId;
     }
     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)
+    {
+        emitNonSemanticShaderDebugInfo = emit;
+
+        if(emit)
+        {
+            importNonSemanticShaderDebugInfoInstructions();
+        }
+    }
+    void setEmitNonSemanticShaderDebugSource(bool const src)
+    {
+        emitNonSemanticShaderDebugSource = src;
+    }
     void addExtension(const char* ext) { extensions.insert(ext); }
     void removeExtension(const char* ext)
     {
@@ -159,10 +181,11 @@
     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();
+    Id makeBoolType(bool const compilerGenerated = true);
     Id makePointer(StorageClass, Id pointee);
     Id makeForwardPointer(StorageClass);
     Id makePointerFromForwardPointer(StorageClass, Id forwardPointerType, Id pointee);
@@ -170,7 +193,7 @@
     Id makeIntType(int width) { return makeIntegerType(width, true); }
     Id makeUintType(int width) { return makeIntegerType(width, false); }
     Id makeFloatType(int width);
-    Id makeStructType(const std::vector<Id>& members, const char*);
+    Id makeStructType(const std::vector<Id>& members, const char* name, bool const compilerGenerated = true);
     Id makeStructResultType(Id type0, Id type1);
     Id makeVectorType(Id component, int size);
     Id makeMatrixType(Id component, int cols, int rows);
@@ -181,6 +204,37 @@
     Id makeSamplerType();
     Id makeSampledImageType(Id imageType);
     Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols);
+    Id makeGenericType(spv::Op opcode, std::vector<spv::IdImmediate>& operands);
+
+    // SPIR-V NonSemantic Shader DebugInfo Instructions
+    struct DebugTypeLoc {
+        std::string name {};
+        int line {0};
+        int column {0};
+    };
+    std::unordered_map<Id, DebugTypeLoc> debugTypeLocs;
+    Id makeDebugInfoNone();
+    Id makeBoolDebugType(int const size);
+    Id makeIntegerDebugType(int const width, bool const hasSign);
+    Id makeFloatDebugType(int const width);
+    Id makeSequentialDebugType(Id const baseType, Id const componentCount, NonSemanticShaderDebugInfo100Instructions const sequenceType);
+    Id makeArrayDebugType(Id const baseType, Id const componentCount);
+    Id makeVectorDebugType(Id const baseType, int const componentCount);
+    Id makeMatrixDebugType(Id const vectorType, int const vectorCount, bool columnMajor = true);
+    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 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 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);
+    std::string unmangleFunctionName(std::string const& name) const;
 
     // accelerationStructureNV type
     Id makeAccelerationStructureType();
@@ -256,6 +310,8 @@
     // 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);
@@ -317,6 +373,8 @@
     Id makeFloat16Constant(float f16, bool specConstant = false);
     Id makeFpConstant(Id type, double d, bool specConstant = false);
 
+    Id importNonSemanticShaderDebugInfoInstructions();
+
     // Turn the array of constants into a proper spv constant of the requested type.
     Id makeCompositeConstant(Id type, const std::vector<Id>& comps, bool specConst = false);
 
@@ -339,7 +397,12 @@
     void addMemberDecoration(Id, unsigned int member, Decoration, const std::vector<const char*>& strings);
 
     // At the end of what block do the next create*() instructions go?
-    void setBuildPoint(Block* bp) { buildPoint = bp; }
+    // Also reset current last DebugScope and current source line to unknown
+    void setBuildPoint(Block* bp) {
+        buildPoint = bp;
+        lastDebugScopeId = NoResult;
+        currentLine = 0;
+    }
     Block* getBuildPoint() const { return buildPoint; }
 
     // Make the entry-point function. The returned pointer is only valid
@@ -350,12 +413,22 @@
     // 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,
-        const std::vector<Id>& paramTypes, const std::vector<std::vector<Decoration>>& precisions, Block **entry = 0);
+        const std::vector<Id>& paramTypes, const std::vector<char const*>& paramNames,
+        const std::vector<std::vector<Decoration>>& precisions, Block **entry = 0);
 
     // 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);
+
+    // Set state and generate instructions to exit current lexical scope
+    void leaveScope();
+
+    // Prepare builder for generation of instructions for a function.
+    void enterFunction(Function const* function);
+
     // Generate all the code needed to finish up a function.
     void leaveFunction();
 
@@ -363,9 +436,13 @@
     // discard, terminate-invocation, terminateRayEXT, or ignoreIntersectionEXT
     void makeStatementTerminator(spv::Op opcode, const char *name);
 
+    // Create block terminator instruction for statements that have input operands
+    // such as OpEmitMeshTasksEXT
+    void makeStatementTerminator(spv::Op opcode, const std::vector<Id>& operands, const char* name);
+
     // Create a global or function local or IO variable.
-    Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr,
-        Id initializer = NoResult);
+    Id createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name = nullptr,
+        Id initializer = NoResult, bool const compilerGenerated = true);
 
     // Create an intermediate with an undefined value.
     Id createUndefined(Id type);
@@ -800,13 +877,23 @@
         const;
 
     unsigned int spvVersion;     // the version of SPIR-V to emit in the header
-    SourceLanguage source;
+    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;
+    std::stack<spv::Id> currentDebugScopeId;
+    spv::Id lastDebugScopeId;
     bool emitOpLines;
+    bool emitNonSemanticShaderDebugInfo;
+    bool restoreNonSemanticShaderDebugInfo;
+    bool emitNonSemanticShaderDebugSource;
     std::set<std::string> extensions;
     std::vector<const char*> sourceExtensions;
     std::vector<const char*> moduleProcesses;
@@ -840,6 +927,8 @@
     std::unordered_map<unsigned int, std::vector<Instruction*>> groupedStructConstants;
     // map type opcodes to type instructions
     std::unordered_map<unsigned int, std::vector<Instruction*>> groupedTypes;
+    // map type opcodes to debug type instructions
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedDebugTypes;
     // list of OpConstantNull instructions
     std::vector<Instruction*> nullConstants;
 
@@ -855,6 +944,12 @@
     // map from include file name ids to their contents
     std::map<spv::Id, const std::string*> includeFiles;
 
+    // map from core id to debug id
+    std::map <spv::Id, spv::Id> debugId;
+
+    // map from file name string id to DebugSource id
+    std::unordered_map<spv::Id, spv::Id> debugSourceId;
+
     // The stream for outputting warnings and errors.
     SpvBuildLogger* logger;
 };  // end Builder class
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
index 8acf9b1..2529993 100644
--- a/SPIRV/SpvTools.cpp
+++ b/SPIRV/SpvTools.cpp
@@ -68,6 +68,8 @@
         }
     case glslang::EShTargetVulkan_1_2:
         return spv_target_env::SPV_ENV_VULKAN_1_2;
+    case glslang::EShTargetVulkan_1_3:
+        return spv_target_env::SPV_ENV_VULKAN_1_3;
     default:
         break;
     }
@@ -210,6 +212,8 @@
     optimizer.RegisterPass(spvtools::CreateInterpolateFixupPass());
     if (options->optimizeSize) {
         optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass());
+        if (intermediate.getStage() == EShLanguage::EShLangVertex)
+            optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsPass());
     }
     optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
     optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h
index 3fb3cba..5386048 100644
--- a/SPIRV/SpvTools.h
+++ b/SPIRV/SpvTools.h
@@ -53,14 +53,14 @@
 namespace glslang {
 
 struct SpvOptions {
-    SpvOptions() : generateDebugInfo(false), stripDebugInfo(false), disableOptimizer(true),
-        optimizeSize(false), disassemble(false), validate(false) { }
-    bool generateDebugInfo;
-    bool stripDebugInfo;
-    bool disableOptimizer;
-    bool optimizeSize;
-    bool disassemble;
-    bool validate;
+    bool generateDebugInfo {false};
+    bool stripDebugInfo {false};
+    bool disableOptimizer {true};
+    bool optimizeSize {false};
+    bool disassemble {false};
+    bool validate {false};
+    bool emitNonSemanticShaderDebugInfo {false};
+    bool emitNonSemanticShaderDebugSource{ false };
 };
 
 #if ENABLE_OPT
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index 73c988c..74dd605 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -43,6 +43,7 @@
 #include <stack>
 #include <sstream>
 #include <cstring>
+#include <utility>
 
 #include "disassemble.h"
 #include "doc.h"
@@ -100,6 +101,7 @@
     void outputMask(OperandClass operandClass, unsigned mask);
     void disassembleImmediates(int numOperands);
     void disassembleIds(int numOperands);
+    std::pair<int, std::string> decodeString();
     int disassembleString();
     void disassembleInstruction(Id resultId, Id typeId, Op opCode, int numOperands);
 
@@ -290,31 +292,44 @@
     }
 }
 
-// return the number of operands consumed by the string
-int SpirvStream::disassembleString()
+// decode string from words at current position (non-consuming)
+std::pair<int, std::string> SpirvStream::decodeString()
 {
-    int startWord = word;
-
-    out << " \"";
-
-    const char* wordString;
+    std::string res;
+    int wordPos = word;
+    char c;
     bool done = false;
+
     do {
-        unsigned int content = stream[word];
-        wordString = (const char*)&content;
+        unsigned int content = stream[wordPos];
         for (int charCount = 0; charCount < 4; ++charCount) {
-            if (*wordString == 0) {
+            c = content & 0xff;
+            content >>= 8;
+            if (c == '\0') {
                 done = true;
                 break;
             }
-            out << *(wordString++);
+            res += c;
         }
-        ++word;
-    } while (! done);
+        ++wordPos;
+    } while(! done);
 
+    return std::make_pair(wordPos - word, res);
+}
+
+// return the number of operands consumed by the string
+int SpirvStream::disassembleString()
+{
+    out << " \"";
+
+    std::pair<int, std::string> decoderes = decodeString();
+
+    out << decoderes.second;
     out << "\"";
 
-    return word - startWord;
+    word += decoderes.first;
+
+    return decoderes.first;
 }
 
 void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, int numOperands)
@@ -331,7 +346,7 @@
             nextNestedControl = 0;
         }
     } else if (opCode == OpExtInstImport) {
-        idDescriptor[resultId] = (const char*)(&stream[word]);
+        idDescriptor[resultId] = decodeString().second;
     }
     else {
         if (resultId != 0 && idDescriptor[resultId].size() == 0) {
@@ -428,7 +443,7 @@
             --numOperands;
             // Get names for printing "(XXX)" for readability, *after* this id
             if (opCode == OpName)
-                idDescriptor[stream[word - 1]] = (const char*)(&stream[word]);
+                idDescriptor[stream[word - 1]] = decodeString().second;
             break;
         case OperandVariableIds:
             disassembleIds(numOperands);
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index dbdf707..b7fe3e7 100644
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -97,6 +97,8 @@
     case 6:  return "Kernel";
     case ExecutionModelTaskNV: return "TaskNV";
     case ExecutionModelMeshNV: return "MeshNV";
+    case ExecutionModelTaskEXT: return "TaskEXT";
+    case ExecutionModelMeshEXT: return "MeshEXT";
 
     default: return "Bad";
 
@@ -173,28 +175,32 @@
     case 31: return "ContractionOff";
     case 32: return "Bad";
 
-    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 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 ExecutionModePostDepthCoverage:        return "PostDepthCoverage";
-    case ExecutionModeDenormPreserve:           return "DenormPreserve";
-    case ExecutionModeDenormFlushToZero:        return "DenormFlushToZero";
-    case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
-    case ExecutionModeRoundingModeRTE:          return "RoundingModeRTE";
-    case ExecutionModeRoundingModeRTZ:          return "RoundingModeRTZ";
-    case ExecutionModeStencilRefReplacingEXT:   return "StencilRefReplacingEXT";
+    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 ExecutionModeStencilRefUnchangedFrontAMD:   return "StencilRefUnchangedFrontAMD";
+    case ExecutionModeStencilRefLessFrontAMD:        return "StencilRefLessFrontAMD";
+    case ExecutionModeStencilRefGreaterBackAMD:      return "StencilRefGreaterBackAMD";
+    case ExecutionModeStencilRefReplacingEXT:        return "StencilRefReplacingEXT";
     case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow";
 
-    case ExecutionModeOutputLinesNV:            return "OutputLinesNV";
-    case ExecutionModeOutputPrimitivesNV:       return "OutputPrimitivesNV";
-    case ExecutionModeOutputTrianglesNV:        return "OutputTrianglesNV";
-    case ExecutionModeDerivativeGroupQuadsNV:   return "DerivativeGroupQuadsNV";
-    case ExecutionModeDerivativeGroupLinearNV:  return "DerivativeGroupLinearNV";
+    case ExecutionModeOutputLinesNV:                 return "OutputLinesNV";
+    case ExecutionModeOutputPrimitivesNV:            return "OutputPrimitivesNV";
+    case ExecutionModeOutputTrianglesNV:             return "OutputTrianglesNV";
+    case ExecutionModeDerivativeGroupQuadsNV:        return "DerivativeGroupQuadsNV";
+    case ExecutionModeDerivativeGroupLinearNV:       return "DerivativeGroupLinearNV";
 
     case ExecutionModePixelInterlockOrderedEXT:         return "PixelInterlockOrderedEXT";
     case ExecutionModePixelInterlockUnorderedEXT:       return "PixelInterlockUnorderedEXT";
@@ -238,7 +244,7 @@
     case StorageClassIncomingCallableDataKHR:  return "IncomingCallableDataKHR";
 
     case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
-
+    case StorageClassTaskPayloadWorkgroupEXT:  return "TaskPayloadWorkgroupEXT";
     default: return "Bad";
     }
 }
@@ -305,7 +311,8 @@
     case DecorationPerPrimitiveNV:              return "PerPrimitiveNV";
     case DecorationPerViewNV:                   return "PerViewNV";
     case DecorationPerTaskNV:                   return "PerTaskNV";
-    case DecorationPerVertexNV:                 return "PerVertexNV";
+    
+    case DecorationPerVertexKHR:                return "PerVertexKHR";
 
     case DecorationNonUniformEXT:           return "DecorationNonUniformEXT";
     case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
@@ -392,6 +399,7 @@
     case BuiltInObjectRayDirectionKHR:       return "ObjectRayDirectionKHR";
     case BuiltInRayTminKHR:                  return "RayTminKHR";
     case BuiltInRayTmaxKHR:                  return "RayTmaxKHR";
+    case BuiltInCullMaskKHR:                 return "CullMaskKHR";
     case BuiltInInstanceCustomIndexKHR:      return "InstanceCustomIndexKHR";
     case BuiltInRayGeometryIndexKHR:         return "RayGeometryIndexKHR";
     case BuiltInObjectToWorldKHR:            return "ObjectToWorldKHR";
@@ -406,8 +414,8 @@
     case BuiltInViewportMaskPerViewNV:       return "ViewportMaskPerViewNV";
 //    case BuiltInFragmentSizeNV:             return "FragmentSizeNV";        // superseded by BuiltInFragSizeEXT
 //    case BuiltInInvocationsPerPixelNV:      return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT
-    case BuiltInBaryCoordNV:                 return "BaryCoordNV";
-    case BuiltInBaryCoordNoPerspNV:          return "BaryCoordNoPerspNV";
+    case BuiltInBaryCoordKHR:                return "BaryCoordKHR";
+    case BuiltInBaryCoordNoPerspKHR:         return "BaryCoordNoPerspKHR";
 
     case BuiltInFragSizeEXT:                 return "FragSizeEXT";
     case BuiltInFragInvocationCountEXT:      return "FragInvocationCountEXT";
@@ -427,6 +435,10 @@
     case BuiltInWarpIDNV:               return "WarpIDNV";
     case BuiltInSMIDNV:                 return "SMIDNV";
     case BuiltInCurrentRayTimeNV:       return "CurrentRayTimeNV";
+    case BuiltInPrimitivePointIndicesEXT:        return "PrimitivePointIndicesEXT";
+    case BuiltInPrimitiveLineIndicesEXT:         return "PrimitiveLineIndicesEXT";
+    case BuiltInPrimitiveTriangleIndicesEXT:     return "PrimitiveTriangleIndicesEXT";
+    case BuiltInCullPrimitiveEXT:                return "CullPrimitiveEXT";
 
     default: return "Bad";
     }
@@ -900,6 +912,12 @@
     case CapabilityDeviceGroup: return "DeviceGroup";
     case CapabilityMultiView:   return "MultiView";
 
+    case CapabilityDenormPreserve:           return "DenormPreserve";
+    case CapabilityDenormFlushToZero:        return "DenormFlushToZero";
+    case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+    case CapabilityRoundingModeRTE:          return "RoundingModeRTE";
+    case CapabilityRoundingModeRTZ:          return "RoundingModeRTZ";
+
     case CapabilityStencilExportEXT: return "StencilExportEXT";
 
     case CapabilityFloat16ImageAMD:       return "Float16ImageAMD";
@@ -919,14 +937,16 @@
     case CapabilityRayTracingNV:                    return "RayTracingNV";
     case CapabilityRayTracingMotionBlurNV:          return "RayTracingMotionBlurNV";
     case CapabilityRayTracingKHR:                   return "RayTracingKHR";
+    case CapabilityRayCullMaskKHR:                  return "RayCullMaskKHR";
     case CapabilityRayQueryKHR:                     return "RayQueryKHR";
     case CapabilityRayTracingProvisionalKHR:        return "RayTracingProvisionalKHR";
     case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
     case CapabilityComputeDerivativeGroupQuadsNV:   return "ComputeDerivativeGroupQuadsNV";
     case CapabilityComputeDerivativeGroupLinearNV:  return "ComputeDerivativeGroupLinearNV";
-    case CapabilityFragmentBarycentricNV:           return "FragmentBarycentricNV";
+    case CapabilityFragmentBarycentricKHR:          return "FragmentBarycentricKHR";
     case CapabilityMeshShadingNV:                   return "MeshShadingNV";
     case CapabilityImageFootprintNV:                return "ImageFootprintNV";
+    case CapabilityMeshShadingEXT:                  return "MeshShadingEXT";
 //    case CapabilityShadingRateNV:                   return "ShadingRateNV";  // superseded by FragmentDensityEXT
     case CapabilitySampleMaskOverrideCoverageNV:    return "SampleMaskOverrideCoverageNV";
     case CapabilityFragmentDensityEXT:              return "FragmentDensityEXT";
@@ -1394,6 +1414,8 @@
     case OpGroupNonUniformPartitionNV:       return "OpGroupNonUniformPartitionNV";
     case OpImageSampleFootprintNV:           return "OpImageSampleFootprintNV";
     case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
+    case OpEmitMeshTasksEXT:                 return "OpEmitMeshTasksEXT";
+    case OpSetMeshOutputsEXT:                return "OpSetMeshOutputsEXT";
 
     case OpTypeRayQueryKHR:                                                   return "OpTypeRayQueryKHR";
     case OpRayQueryInitializeKHR:                                             return "OpRayQueryInitializeKHR";
@@ -2968,6 +2990,17 @@
     InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
     InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
 
+    InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountX'");
+    InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountY'");
+    InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountZ'");
+    InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'Payload'");
+    InstructionDesc[OpEmitMeshTasksEXT].setResultAndType(false, false);
+
+    InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'");
+    InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'");
+    InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false);
+
+
     InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
     InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
     InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index f6b7be9..0e40544 100644
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -1,2314 +1,2533 @@
-// Copyright (c) 2014-2020 The Khronos Group Inc.
-// 
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and/or associated documentation files (the "Materials"),
-// to deal in the Materials without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Materials, and to permit persons to whom the
-// Materials are furnished to do so, subject to the following conditions:
-// 
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Materials.
-// 
-// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
-// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
-// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
-// 
-// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
-// IN THE MATERIALS.
-
-// This header is automatically generated by the same tool that creates
-// the Binary Section of the SPIR-V specification.
-
-// Enumeration tokens for SPIR-V, in various styles:
-//   C, C++, C++11, JSON, Lua, Python, C#, D
-// 
-// - 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
-// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
-// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
-// - C# will use enum classes in the Specification class located in the "Spv" namespace,
-//     e.g.: Spv.Specification.SourceLanguage.GLSL
-// - D will have tokens under the "spv" module, e.g: spv.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
-// amount (1 << x) for each corresponding enumerant.
-
-#ifndef spirv_HPP
-#define spirv_HPP
-
-namespace spv {
-
-typedef unsigned int Id;
-
-#define SPV_VERSION 0x10500
-#define SPV_REVISION 4
-
-static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010500;
-static const unsigned int Revision = 4;
-static const unsigned int OpCodeMask = 0xffff;
-static const unsigned int WordCountShift = 16;
-
-enum SourceLanguage {
-    SourceLanguageUnknown = 0,
-    SourceLanguageESSL = 1,
-    SourceLanguageGLSL = 2,
-    SourceLanguageOpenCL_C = 3,
-    SourceLanguageOpenCL_CPP = 4,
-    SourceLanguageHLSL = 5,
-    SourceLanguageMax = 0x7fffffff,
-};
-
-enum ExecutionModel {
-    ExecutionModelVertex = 0,
-    ExecutionModelTessellationControl = 1,
-    ExecutionModelTessellationEvaluation = 2,
-    ExecutionModelGeometry = 3,
-    ExecutionModelFragment = 4,
-    ExecutionModelGLCompute = 5,
-    ExecutionModelKernel = 6,
-    ExecutionModelTaskNV = 5267,
-    ExecutionModelMeshNV = 5268,
-    ExecutionModelRayGenerationKHR = 5313,
-    ExecutionModelRayGenerationNV = 5313,
-    ExecutionModelIntersectionKHR = 5314,
-    ExecutionModelIntersectionNV = 5314,
-    ExecutionModelAnyHitKHR = 5315,
-    ExecutionModelAnyHitNV = 5315,
-    ExecutionModelClosestHitKHR = 5316,
-    ExecutionModelClosestHitNV = 5316,
-    ExecutionModelMissKHR = 5317,
-    ExecutionModelMissNV = 5317,
-    ExecutionModelCallableKHR = 5318,
-    ExecutionModelCallableNV = 5318,
-    ExecutionModelMax = 0x7fffffff,
-};
-
-enum AddressingModel {
-    AddressingModelLogical = 0,
-    AddressingModelPhysical32 = 1,
-    AddressingModelPhysical64 = 2,
-    AddressingModelPhysicalStorageBuffer64 = 5348,
-    AddressingModelPhysicalStorageBuffer64EXT = 5348,
-    AddressingModelMax = 0x7fffffff,
-};
-
-enum MemoryModel {
-    MemoryModelSimple = 0,
-    MemoryModelGLSL450 = 1,
-    MemoryModelOpenCL = 2,
-    MemoryModelVulkan = 3,
-    MemoryModelVulkanKHR = 3,
-    MemoryModelMax = 0x7fffffff,
-};
-
-enum ExecutionMode {
-    ExecutionModeInvocations = 0,
-    ExecutionModeSpacingEqual = 1,
-    ExecutionModeSpacingFractionalEven = 2,
-    ExecutionModeSpacingFractionalOdd = 3,
-    ExecutionModeVertexOrderCw = 4,
-    ExecutionModeVertexOrderCcw = 5,
-    ExecutionModePixelCenterInteger = 6,
-    ExecutionModeOriginUpperLeft = 7,
-    ExecutionModeOriginLowerLeft = 8,
-    ExecutionModeEarlyFragmentTests = 9,
-    ExecutionModePointMode = 10,
-    ExecutionModeXfb = 11,
-    ExecutionModeDepthReplacing = 12,
-    ExecutionModeDepthGreater = 14,
-    ExecutionModeDepthLess = 15,
-    ExecutionModeDepthUnchanged = 16,
-    ExecutionModeLocalSize = 17,
-    ExecutionModeLocalSizeHint = 18,
-    ExecutionModeInputPoints = 19,
-    ExecutionModeInputLines = 20,
-    ExecutionModeInputLinesAdjacency = 21,
-    ExecutionModeTriangles = 22,
-    ExecutionModeInputTrianglesAdjacency = 23,
-    ExecutionModeQuads = 24,
-    ExecutionModeIsolines = 25,
-    ExecutionModeOutputVertices = 26,
-    ExecutionModeOutputPoints = 27,
-    ExecutionModeOutputLineStrip = 28,
-    ExecutionModeOutputTriangleStrip = 29,
-    ExecutionModeVecTypeHint = 30,
-    ExecutionModeContractionOff = 31,
-    ExecutionModeInitializer = 33,
-    ExecutionModeFinalizer = 34,
-    ExecutionModeSubgroupSize = 35,
-    ExecutionModeSubgroupsPerWorkgroup = 36,
-    ExecutionModeSubgroupsPerWorkgroupId = 37,
-    ExecutionModeLocalSizeId = 38,
-    ExecutionModeLocalSizeHintId = 39,
-    ExecutionModeSubgroupUniformControlFlowKHR = 4421,
-    ExecutionModePostDepthCoverage = 4446,
-    ExecutionModeDenormPreserve = 4459,
-    ExecutionModeDenormFlushToZero = 4460,
-    ExecutionModeSignedZeroInfNanPreserve = 4461,
-    ExecutionModeRoundingModeRTE = 4462,
-    ExecutionModeRoundingModeRTZ = 4463,
-    ExecutionModeStencilRefReplacingEXT = 5027,
-    ExecutionModeOutputLinesNV = 5269,
-    ExecutionModeOutputPrimitivesNV = 5270,
-    ExecutionModeDerivativeGroupQuadsNV = 5289,
-    ExecutionModeDerivativeGroupLinearNV = 5290,
-    ExecutionModeOutputTrianglesNV = 5298,
-    ExecutionModePixelInterlockOrderedEXT = 5366,
-    ExecutionModePixelInterlockUnorderedEXT = 5367,
-    ExecutionModeSampleInterlockOrderedEXT = 5368,
-    ExecutionModeSampleInterlockUnorderedEXT = 5369,
-    ExecutionModeShadingRateInterlockOrderedEXT = 5370,
-    ExecutionModeShadingRateInterlockUnorderedEXT = 5371,
-    ExecutionModeSharedLocalMemorySizeINTEL = 5618,
-    ExecutionModeRoundingModeRTPINTEL = 5620,
-    ExecutionModeRoundingModeRTNINTEL = 5621,
-    ExecutionModeFloatingPointModeALTINTEL = 5622,
-    ExecutionModeFloatingPointModeIEEEINTEL = 5623,
-    ExecutionModeMaxWorkgroupSizeINTEL = 5893,
-    ExecutionModeMaxWorkDimINTEL = 5894,
-    ExecutionModeNoGlobalOffsetINTEL = 5895,
-    ExecutionModeNumSIMDWorkitemsINTEL = 5896,
-    ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
-    ExecutionModeMax = 0x7fffffff,
-};
-
-enum StorageClass {
-    StorageClassUniformConstant = 0,
-    StorageClassInput = 1,
-    StorageClassUniform = 2,
-    StorageClassOutput = 3,
-    StorageClassWorkgroup = 4,
-    StorageClassCrossWorkgroup = 5,
-    StorageClassPrivate = 6,
-    StorageClassFunction = 7,
-    StorageClassGeneric = 8,
-    StorageClassPushConstant = 9,
-    StorageClassAtomicCounter = 10,
-    StorageClassImage = 11,
-    StorageClassStorageBuffer = 12,
-    StorageClassCallableDataKHR = 5328,
-    StorageClassCallableDataNV = 5328,
-    StorageClassIncomingCallableDataKHR = 5329,
-    StorageClassIncomingCallableDataNV = 5329,
-    StorageClassRayPayloadKHR = 5338,
-    StorageClassRayPayloadNV = 5338,
-    StorageClassHitAttributeKHR = 5339,
-    StorageClassHitAttributeNV = 5339,
-    StorageClassIncomingRayPayloadKHR = 5342,
-    StorageClassIncomingRayPayloadNV = 5342,
-    StorageClassShaderRecordBufferKHR = 5343,
-    StorageClassShaderRecordBufferNV = 5343,
-    StorageClassPhysicalStorageBuffer = 5349,
-    StorageClassPhysicalStorageBufferEXT = 5349,
-    StorageClassCodeSectionINTEL = 5605,
-    StorageClassDeviceOnlyINTEL = 5936,
-    StorageClassHostOnlyINTEL = 5937,
-    StorageClassMax = 0x7fffffff,
-};
-
-enum Dim {
-    Dim1D = 0,
-    Dim2D = 1,
-    Dim3D = 2,
-    DimCube = 3,
-    DimRect = 4,
-    DimBuffer = 5,
-    DimSubpassData = 6,
-    DimMax = 0x7fffffff,
-};
-
-enum SamplerAddressingMode {
-    SamplerAddressingModeNone = 0,
-    SamplerAddressingModeClampToEdge = 1,
-    SamplerAddressingModeClamp = 2,
-    SamplerAddressingModeRepeat = 3,
-    SamplerAddressingModeRepeatMirrored = 4,
-    SamplerAddressingModeMax = 0x7fffffff,
-};
-
-enum SamplerFilterMode {
-    SamplerFilterModeNearest = 0,
-    SamplerFilterModeLinear = 1,
-    SamplerFilterModeMax = 0x7fffffff,
-};
-
-enum ImageFormat {
-    ImageFormatUnknown = 0,
-    ImageFormatRgba32f = 1,
-    ImageFormatRgba16f = 2,
-    ImageFormatR32f = 3,
-    ImageFormatRgba8 = 4,
-    ImageFormatRgba8Snorm = 5,
-    ImageFormatRg32f = 6,
-    ImageFormatRg16f = 7,
-    ImageFormatR11fG11fB10f = 8,
-    ImageFormatR16f = 9,
-    ImageFormatRgba16 = 10,
-    ImageFormatRgb10A2 = 11,
-    ImageFormatRg16 = 12,
-    ImageFormatRg8 = 13,
-    ImageFormatR16 = 14,
-    ImageFormatR8 = 15,
-    ImageFormatRgba16Snorm = 16,
-    ImageFormatRg16Snorm = 17,
-    ImageFormatRg8Snorm = 18,
-    ImageFormatR16Snorm = 19,
-    ImageFormatR8Snorm = 20,
-    ImageFormatRgba32i = 21,
-    ImageFormatRgba16i = 22,
-    ImageFormatRgba8i = 23,
-    ImageFormatR32i = 24,
-    ImageFormatRg32i = 25,
-    ImageFormatRg16i = 26,
-    ImageFormatRg8i = 27,
-    ImageFormatR16i = 28,
-    ImageFormatR8i = 29,
-    ImageFormatRgba32ui = 30,
-    ImageFormatRgba16ui = 31,
-    ImageFormatRgba8ui = 32,
-    ImageFormatR32ui = 33,
-    ImageFormatRgb10a2ui = 34,
-    ImageFormatRg32ui = 35,
-    ImageFormatRg16ui = 36,
-    ImageFormatRg8ui = 37,
-    ImageFormatR16ui = 38,
-    ImageFormatR8ui = 39,
-    ImageFormatR64ui = 40,
-    ImageFormatR64i = 41,
-    ImageFormatMax = 0x7fffffff,
-};
-
-enum ImageChannelOrder {
-    ImageChannelOrderR = 0,
-    ImageChannelOrderA = 1,
-    ImageChannelOrderRG = 2,
-    ImageChannelOrderRA = 3,
-    ImageChannelOrderRGB = 4,
-    ImageChannelOrderRGBA = 5,
-    ImageChannelOrderBGRA = 6,
-    ImageChannelOrderARGB = 7,
-    ImageChannelOrderIntensity = 8,
-    ImageChannelOrderLuminance = 9,
-    ImageChannelOrderRx = 10,
-    ImageChannelOrderRGx = 11,
-    ImageChannelOrderRGBx = 12,
-    ImageChannelOrderDepth = 13,
-    ImageChannelOrderDepthStencil = 14,
-    ImageChannelOrdersRGB = 15,
-    ImageChannelOrdersRGBx = 16,
-    ImageChannelOrdersRGBA = 17,
-    ImageChannelOrdersBGRA = 18,
-    ImageChannelOrderABGR = 19,
-    ImageChannelOrderMax = 0x7fffffff,
-};
-
-enum ImageChannelDataType {
-    ImageChannelDataTypeSnormInt8 = 0,
-    ImageChannelDataTypeSnormInt16 = 1,
-    ImageChannelDataTypeUnormInt8 = 2,
-    ImageChannelDataTypeUnormInt16 = 3,
-    ImageChannelDataTypeUnormShort565 = 4,
-    ImageChannelDataTypeUnormShort555 = 5,
-    ImageChannelDataTypeUnormInt101010 = 6,
-    ImageChannelDataTypeSignedInt8 = 7,
-    ImageChannelDataTypeSignedInt16 = 8,
-    ImageChannelDataTypeSignedInt32 = 9,
-    ImageChannelDataTypeUnsignedInt8 = 10,
-    ImageChannelDataTypeUnsignedInt16 = 11,
-    ImageChannelDataTypeUnsignedInt32 = 12,
-    ImageChannelDataTypeHalfFloat = 13,
-    ImageChannelDataTypeFloat = 14,
-    ImageChannelDataTypeUnormInt24 = 15,
-    ImageChannelDataTypeUnormInt101010_2 = 16,
-    ImageChannelDataTypeMax = 0x7fffffff,
-};
-
-enum ImageOperandsShift {
-    ImageOperandsBiasShift = 0,
-    ImageOperandsLodShift = 1,
-    ImageOperandsGradShift = 2,
-    ImageOperandsConstOffsetShift = 3,
-    ImageOperandsOffsetShift = 4,
-    ImageOperandsConstOffsetsShift = 5,
-    ImageOperandsSampleShift = 6,
-    ImageOperandsMinLodShift = 7,
-    ImageOperandsMakeTexelAvailableShift = 8,
-    ImageOperandsMakeTexelAvailableKHRShift = 8,
-    ImageOperandsMakeTexelVisibleShift = 9,
-    ImageOperandsMakeTexelVisibleKHRShift = 9,
-    ImageOperandsNonPrivateTexelShift = 10,
-    ImageOperandsNonPrivateTexelKHRShift = 10,
-    ImageOperandsVolatileTexelShift = 11,
-    ImageOperandsVolatileTexelKHRShift = 11,
-    ImageOperandsSignExtendShift = 12,
-    ImageOperandsZeroExtendShift = 13,
-    ImageOperandsMax = 0x7fffffff,
-};
-
-enum ImageOperandsMask {
-    ImageOperandsMaskNone = 0,
-    ImageOperandsBiasMask = 0x00000001,
-    ImageOperandsLodMask = 0x00000002,
-    ImageOperandsGradMask = 0x00000004,
-    ImageOperandsConstOffsetMask = 0x00000008,
-    ImageOperandsOffsetMask = 0x00000010,
-    ImageOperandsConstOffsetsMask = 0x00000020,
-    ImageOperandsSampleMask = 0x00000040,
-    ImageOperandsMinLodMask = 0x00000080,
-    ImageOperandsMakeTexelAvailableMask = 0x00000100,
-    ImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
-    ImageOperandsMakeTexelVisibleMask = 0x00000200,
-    ImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
-    ImageOperandsNonPrivateTexelMask = 0x00000400,
-    ImageOperandsNonPrivateTexelKHRMask = 0x00000400,
-    ImageOperandsVolatileTexelMask = 0x00000800,
-    ImageOperandsVolatileTexelKHRMask = 0x00000800,
-    ImageOperandsSignExtendMask = 0x00001000,
-    ImageOperandsZeroExtendMask = 0x00002000,
-};
-
-enum FPFastMathModeShift {
-    FPFastMathModeNotNaNShift = 0,
-    FPFastMathModeNotInfShift = 1,
-    FPFastMathModeNSZShift = 2,
-    FPFastMathModeAllowRecipShift = 3,
-    FPFastMathModeFastShift = 4,
-    FPFastMathModeAllowContractFastINTELShift = 16,
-    FPFastMathModeAllowReassocINTELShift = 17,
-    FPFastMathModeMax = 0x7fffffff,
-};
-
-enum FPFastMathModeMask {
-    FPFastMathModeMaskNone = 0,
-    FPFastMathModeNotNaNMask = 0x00000001,
-    FPFastMathModeNotInfMask = 0x00000002,
-    FPFastMathModeNSZMask = 0x00000004,
-    FPFastMathModeAllowRecipMask = 0x00000008,
-    FPFastMathModeFastMask = 0x00000010,
-    FPFastMathModeAllowContractFastINTELMask = 0x00010000,
-    FPFastMathModeAllowReassocINTELMask = 0x00020000,
-};
-
-enum FPRoundingMode {
-    FPRoundingModeRTE = 0,
-    FPRoundingModeRTZ = 1,
-    FPRoundingModeRTP = 2,
-    FPRoundingModeRTN = 3,
-    FPRoundingModeMax = 0x7fffffff,
-};
-
-enum LinkageType {
-    LinkageTypeExport = 0,
-    LinkageTypeImport = 1,
-    LinkageTypeLinkOnceODR = 2,
-    LinkageTypeMax = 0x7fffffff,
-};
-
-enum AccessQualifier {
-    AccessQualifierReadOnly = 0,
-    AccessQualifierWriteOnly = 1,
-    AccessQualifierReadWrite = 2,
-    AccessQualifierMax = 0x7fffffff,
-};
-
-enum FunctionParameterAttribute {
-    FunctionParameterAttributeZext = 0,
-    FunctionParameterAttributeSext = 1,
-    FunctionParameterAttributeByVal = 2,
-    FunctionParameterAttributeSret = 3,
-    FunctionParameterAttributeNoAlias = 4,
-    FunctionParameterAttributeNoCapture = 5,
-    FunctionParameterAttributeNoWrite = 6,
-    FunctionParameterAttributeNoReadWrite = 7,
-    FunctionParameterAttributeMax = 0x7fffffff,
-};
-
-enum Decoration {
-    DecorationRelaxedPrecision = 0,
-    DecorationSpecId = 1,
-    DecorationBlock = 2,
-    DecorationBufferBlock = 3,
-    DecorationRowMajor = 4,
-    DecorationColMajor = 5,
-    DecorationArrayStride = 6,
-    DecorationMatrixStride = 7,
-    DecorationGLSLShared = 8,
-    DecorationGLSLPacked = 9,
-    DecorationCPacked = 10,
-    DecorationBuiltIn = 11,
-    DecorationNoPerspective = 13,
-    DecorationFlat = 14,
-    DecorationPatch = 15,
-    DecorationCentroid = 16,
-    DecorationSample = 17,
-    DecorationInvariant = 18,
-    DecorationRestrict = 19,
-    DecorationAliased = 20,
-    DecorationVolatile = 21,
-    DecorationConstant = 22,
-    DecorationCoherent = 23,
-    DecorationNonWritable = 24,
-    DecorationNonReadable = 25,
-    DecorationUniform = 26,
-    DecorationUniformId = 27,
-    DecorationSaturatedConversion = 28,
-    DecorationStream = 29,
-    DecorationLocation = 30,
-    DecorationComponent = 31,
-    DecorationIndex = 32,
-    DecorationBinding = 33,
-    DecorationDescriptorSet = 34,
-    DecorationOffset = 35,
-    DecorationXfbBuffer = 36,
-    DecorationXfbStride = 37,
-    DecorationFuncParamAttr = 38,
-    DecorationFPRoundingMode = 39,
-    DecorationFPFastMathMode = 40,
-    DecorationLinkageAttributes = 41,
-    DecorationNoContraction = 42,
-    DecorationInputAttachmentIndex = 43,
-    DecorationAlignment = 44,
-    DecorationMaxByteOffset = 45,
-    DecorationAlignmentId = 46,
-    DecorationMaxByteOffsetId = 47,
-    DecorationNoSignedWrap = 4469,
-    DecorationNoUnsignedWrap = 4470,
-    DecorationExplicitInterpAMD = 4999,
-    DecorationOverrideCoverageNV = 5248,
-    DecorationPassthroughNV = 5250,
-    DecorationViewportRelativeNV = 5252,
-    DecorationSecondaryViewportRelativeNV = 5256,
-    DecorationPerPrimitiveNV = 5271,
-    DecorationPerViewNV = 5272,
-    DecorationPerTaskNV = 5273,
-    DecorationPerVertexNV = 5285,
-    DecorationNonUniform = 5300,
-    DecorationNonUniformEXT = 5300,
-    DecorationRestrictPointer = 5355,
-    DecorationRestrictPointerEXT = 5355,
-    DecorationAliasedPointer = 5356,
-    DecorationAliasedPointerEXT = 5356,
-    DecorationSIMTCallINTEL = 5599,
-    DecorationReferencedIndirectlyINTEL = 5602,
-    DecorationClobberINTEL = 5607,
-    DecorationSideEffectsINTEL = 5608,
-    DecorationVectorComputeVariableINTEL = 5624,
-    DecorationFuncParamIOKindINTEL = 5625,
-    DecorationVectorComputeFunctionINTEL = 5626,
-    DecorationStackCallINTEL = 5627,
-    DecorationGlobalVariableOffsetINTEL = 5628,
-    DecorationCounterBuffer = 5634,
-    DecorationHlslCounterBufferGOOGLE = 5634,
-    DecorationHlslSemanticGOOGLE = 5635,
-    DecorationUserSemantic = 5635,
-    DecorationUserTypeGOOGLE = 5636,
-    DecorationFunctionRoundingModeINTEL = 5822,
-    DecorationFunctionDenormModeINTEL = 5823,
-    DecorationRegisterINTEL = 5825,
-    DecorationMemoryINTEL = 5826,
-    DecorationNumbanksINTEL = 5827,
-    DecorationBankwidthINTEL = 5828,
-    DecorationMaxPrivateCopiesINTEL = 5829,
-    DecorationSinglepumpINTEL = 5830,
-    DecorationDoublepumpINTEL = 5831,
-    DecorationMaxReplicatesINTEL = 5832,
-    DecorationSimpleDualPortINTEL = 5833,
-    DecorationMergeINTEL = 5834,
-    DecorationBankBitsINTEL = 5835,
-    DecorationForcePow2DepthINTEL = 5836,
-    DecorationBurstCoalesceINTEL = 5899,
-    DecorationCacheSizeINTEL = 5900,
-    DecorationDontStaticallyCoalesceINTEL = 5901,
-    DecorationPrefetchINTEL = 5902,
-    DecorationStallEnableINTEL = 5905,
-    DecorationFuseLoopsInFunctionINTEL = 5907,
-    DecorationBufferLocationINTEL = 5921,
-    DecorationIOPipeStorageINTEL = 5944,
-    DecorationFunctionFloatingPointModeINTEL = 6080,
-    DecorationSingleElementVectorINTEL = 6085,
-    DecorationVectorComputeCallableFunctionINTEL = 6087,
-    DecorationMax = 0x7fffffff,
-};
-
-enum BuiltIn {
-    BuiltInPosition = 0,
-    BuiltInPointSize = 1,
-    BuiltInClipDistance = 3,
-    BuiltInCullDistance = 4,
-    BuiltInVertexId = 5,
-    BuiltInInstanceId = 6,
-    BuiltInPrimitiveId = 7,
-    BuiltInInvocationId = 8,
-    BuiltInLayer = 9,
-    BuiltInViewportIndex = 10,
-    BuiltInTessLevelOuter = 11,
-    BuiltInTessLevelInner = 12,
-    BuiltInTessCoord = 13,
-    BuiltInPatchVertices = 14,
-    BuiltInFragCoord = 15,
-    BuiltInPointCoord = 16,
-    BuiltInFrontFacing = 17,
-    BuiltInSampleId = 18,
-    BuiltInSamplePosition = 19,
-    BuiltInSampleMask = 20,
-    BuiltInFragDepth = 22,
-    BuiltInHelperInvocation = 23,
-    BuiltInNumWorkgroups = 24,
-    BuiltInWorkgroupSize = 25,
-    BuiltInWorkgroupId = 26,
-    BuiltInLocalInvocationId = 27,
-    BuiltInGlobalInvocationId = 28,
-    BuiltInLocalInvocationIndex = 29,
-    BuiltInWorkDim = 30,
-    BuiltInGlobalSize = 31,
-    BuiltInEnqueuedWorkgroupSize = 32,
-    BuiltInGlobalOffset = 33,
-    BuiltInGlobalLinearId = 34,
-    BuiltInSubgroupSize = 36,
-    BuiltInSubgroupMaxSize = 37,
-    BuiltInNumSubgroups = 38,
-    BuiltInNumEnqueuedSubgroups = 39,
-    BuiltInSubgroupId = 40,
-    BuiltInSubgroupLocalInvocationId = 41,
-    BuiltInVertexIndex = 42,
-    BuiltInInstanceIndex = 43,
-    BuiltInSubgroupEqMask = 4416,
-    BuiltInSubgroupEqMaskKHR = 4416,
-    BuiltInSubgroupGeMask = 4417,
-    BuiltInSubgroupGeMaskKHR = 4417,
-    BuiltInSubgroupGtMask = 4418,
-    BuiltInSubgroupGtMaskKHR = 4418,
-    BuiltInSubgroupLeMask = 4419,
-    BuiltInSubgroupLeMaskKHR = 4419,
-    BuiltInSubgroupLtMask = 4420,
-    BuiltInSubgroupLtMaskKHR = 4420,
-    BuiltInBaseVertex = 4424,
-    BuiltInBaseInstance = 4425,
-    BuiltInDrawIndex = 4426,
-    BuiltInPrimitiveShadingRateKHR = 4432,
-    BuiltInDeviceIndex = 4438,
-    BuiltInViewIndex = 4440,
-    BuiltInShadingRateKHR = 4444,
-    BuiltInBaryCoordNoPerspAMD = 4992,
-    BuiltInBaryCoordNoPerspCentroidAMD = 4993,
-    BuiltInBaryCoordNoPerspSampleAMD = 4994,
-    BuiltInBaryCoordSmoothAMD = 4995,
-    BuiltInBaryCoordSmoothCentroidAMD = 4996,
-    BuiltInBaryCoordSmoothSampleAMD = 4997,
-    BuiltInBaryCoordPullModelAMD = 4998,
-    BuiltInFragStencilRefEXT = 5014,
-    BuiltInViewportMaskNV = 5253,
-    BuiltInSecondaryPositionNV = 5257,
-    BuiltInSecondaryViewportMaskNV = 5258,
-    BuiltInPositionPerViewNV = 5261,
-    BuiltInViewportMaskPerViewNV = 5262,
-    BuiltInFullyCoveredEXT = 5264,
-    BuiltInTaskCountNV = 5274,
-    BuiltInPrimitiveCountNV = 5275,
-    BuiltInPrimitiveIndicesNV = 5276,
-    BuiltInClipDistancePerViewNV = 5277,
-    BuiltInCullDistancePerViewNV = 5278,
-    BuiltInLayerPerViewNV = 5279,
-    BuiltInMeshViewCountNV = 5280,
-    BuiltInMeshViewIndicesNV = 5281,
-    BuiltInBaryCoordNV = 5286,
-    BuiltInBaryCoordNoPerspNV = 5287,
-    BuiltInFragSizeEXT = 5292,
-    BuiltInFragmentSizeNV = 5292,
-    BuiltInFragInvocationCountEXT = 5293,
-    BuiltInInvocationsPerPixelNV = 5293,
-    BuiltInLaunchIdKHR = 5319,
-    BuiltInLaunchIdNV = 5319,
-    BuiltInLaunchSizeKHR = 5320,
-    BuiltInLaunchSizeNV = 5320,
-    BuiltInWorldRayOriginKHR = 5321,
-    BuiltInWorldRayOriginNV = 5321,
-    BuiltInWorldRayDirectionKHR = 5322,
-    BuiltInWorldRayDirectionNV = 5322,
-    BuiltInObjectRayOriginKHR = 5323,
-    BuiltInObjectRayOriginNV = 5323,
-    BuiltInObjectRayDirectionKHR = 5324,
-    BuiltInObjectRayDirectionNV = 5324,
-    BuiltInRayTminKHR = 5325,
-    BuiltInRayTminNV = 5325,
-    BuiltInRayTmaxKHR = 5326,
-    BuiltInRayTmaxNV = 5326,
-    BuiltInInstanceCustomIndexKHR = 5327,
-    BuiltInInstanceCustomIndexNV = 5327,
-    BuiltInObjectToWorldKHR = 5330,
-    BuiltInObjectToWorldNV = 5330,
-    BuiltInWorldToObjectKHR = 5331,
-    BuiltInWorldToObjectNV = 5331,
-    BuiltInHitTNV = 5332,
-    BuiltInHitKindKHR = 5333,
-    BuiltInHitKindNV = 5333,
-    BuiltInCurrentRayTimeNV = 5334,
-    BuiltInIncomingRayFlagsKHR = 5351,
-    BuiltInIncomingRayFlagsNV = 5351,
-    BuiltInRayGeometryIndexKHR = 5352,
-    BuiltInWarpsPerSMNV = 5374,
-    BuiltInSMCountNV = 5375,
-    BuiltInWarpIDNV = 5376,
-    BuiltInSMIDNV = 5377,
-    BuiltInMax = 0x7fffffff,
-};
-
-enum SelectionControlShift {
-    SelectionControlFlattenShift = 0,
-    SelectionControlDontFlattenShift = 1,
-    SelectionControlMax = 0x7fffffff,
-};
-
-enum SelectionControlMask {
-    SelectionControlMaskNone = 0,
-    SelectionControlFlattenMask = 0x00000001,
-    SelectionControlDontFlattenMask = 0x00000002,
-};
-
-enum LoopControlShift {
-    LoopControlUnrollShift = 0,
-    LoopControlDontUnrollShift = 1,
-    LoopControlDependencyInfiniteShift = 2,
-    LoopControlDependencyLengthShift = 3,
-    LoopControlMinIterationsShift = 4,
-    LoopControlMaxIterationsShift = 5,
-    LoopControlIterationMultipleShift = 6,
-    LoopControlPeelCountShift = 7,
-    LoopControlPartialCountShift = 8,
-    LoopControlInitiationIntervalINTELShift = 16,
-    LoopControlMaxConcurrencyINTELShift = 17,
-    LoopControlDependencyArrayINTELShift = 18,
-    LoopControlPipelineEnableINTELShift = 19,
-    LoopControlLoopCoalesceINTELShift = 20,
-    LoopControlMaxInterleavingINTELShift = 21,
-    LoopControlSpeculatedIterationsINTELShift = 22,
-    LoopControlNoFusionINTELShift = 23,
-    LoopControlMax = 0x7fffffff,
-};
-
-enum LoopControlMask {
-    LoopControlMaskNone = 0,
-    LoopControlUnrollMask = 0x00000001,
-    LoopControlDontUnrollMask = 0x00000002,
-    LoopControlDependencyInfiniteMask = 0x00000004,
-    LoopControlDependencyLengthMask = 0x00000008,
-    LoopControlMinIterationsMask = 0x00000010,
-    LoopControlMaxIterationsMask = 0x00000020,
-    LoopControlIterationMultipleMask = 0x00000040,
-    LoopControlPeelCountMask = 0x00000080,
-    LoopControlPartialCountMask = 0x00000100,
-    LoopControlInitiationIntervalINTELMask = 0x00010000,
-    LoopControlMaxConcurrencyINTELMask = 0x00020000,
-    LoopControlDependencyArrayINTELMask = 0x00040000,
-    LoopControlPipelineEnableINTELMask = 0x00080000,
-    LoopControlLoopCoalesceINTELMask = 0x00100000,
-    LoopControlMaxInterleavingINTELMask = 0x00200000,
-    LoopControlSpeculatedIterationsINTELMask = 0x00400000,
-    LoopControlNoFusionINTELMask = 0x00800000,
-};
-
-enum FunctionControlShift {
-    FunctionControlInlineShift = 0,
-    FunctionControlDontInlineShift = 1,
-    FunctionControlPureShift = 2,
-    FunctionControlConstShift = 3,
-    FunctionControlMax = 0x7fffffff,
-};
-
-enum FunctionControlMask {
-    FunctionControlMaskNone = 0,
-    FunctionControlInlineMask = 0x00000001,
-    FunctionControlDontInlineMask = 0x00000002,
-    FunctionControlPureMask = 0x00000004,
-    FunctionControlConstMask = 0x00000008,
-};
-
-enum MemorySemanticsShift {
-    MemorySemanticsAcquireShift = 1,
-    MemorySemanticsReleaseShift = 2,
-    MemorySemanticsAcquireReleaseShift = 3,
-    MemorySemanticsSequentiallyConsistentShift = 4,
-    MemorySemanticsUniformMemoryShift = 6,
-    MemorySemanticsSubgroupMemoryShift = 7,
-    MemorySemanticsWorkgroupMemoryShift = 8,
-    MemorySemanticsCrossWorkgroupMemoryShift = 9,
-    MemorySemanticsAtomicCounterMemoryShift = 10,
-    MemorySemanticsImageMemoryShift = 11,
-    MemorySemanticsOutputMemoryShift = 12,
-    MemorySemanticsOutputMemoryKHRShift = 12,
-    MemorySemanticsMakeAvailableShift = 13,
-    MemorySemanticsMakeAvailableKHRShift = 13,
-    MemorySemanticsMakeVisibleShift = 14,
-    MemorySemanticsMakeVisibleKHRShift = 14,
-    MemorySemanticsVolatileShift = 15,
-    MemorySemanticsMax = 0x7fffffff,
-};
-
-enum MemorySemanticsMask {
-    MemorySemanticsMaskNone = 0,
-    MemorySemanticsAcquireMask = 0x00000002,
-    MemorySemanticsReleaseMask = 0x00000004,
-    MemorySemanticsAcquireReleaseMask = 0x00000008,
-    MemorySemanticsSequentiallyConsistentMask = 0x00000010,
-    MemorySemanticsUniformMemoryMask = 0x00000040,
-    MemorySemanticsSubgroupMemoryMask = 0x00000080,
-    MemorySemanticsWorkgroupMemoryMask = 0x00000100,
-    MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
-    MemorySemanticsAtomicCounterMemoryMask = 0x00000400,
-    MemorySemanticsImageMemoryMask = 0x00000800,
-    MemorySemanticsOutputMemoryMask = 0x00001000,
-    MemorySemanticsOutputMemoryKHRMask = 0x00001000,
-    MemorySemanticsMakeAvailableMask = 0x00002000,
-    MemorySemanticsMakeAvailableKHRMask = 0x00002000,
-    MemorySemanticsMakeVisibleMask = 0x00004000,
-    MemorySemanticsMakeVisibleKHRMask = 0x00004000,
-    MemorySemanticsVolatileMask = 0x00008000,
-};
-
-enum MemoryAccessShift {
-    MemoryAccessVolatileShift = 0,
-    MemoryAccessAlignedShift = 1,
-    MemoryAccessNontemporalShift = 2,
-    MemoryAccessMakePointerAvailableShift = 3,
-    MemoryAccessMakePointerAvailableKHRShift = 3,
-    MemoryAccessMakePointerVisibleShift = 4,
-    MemoryAccessMakePointerVisibleKHRShift = 4,
-    MemoryAccessNonPrivatePointerShift = 5,
-    MemoryAccessNonPrivatePointerKHRShift = 5,
-    MemoryAccessMax = 0x7fffffff,
-};
-
-enum MemoryAccessMask {
-    MemoryAccessMaskNone = 0,
-    MemoryAccessVolatileMask = 0x00000001,
-    MemoryAccessAlignedMask = 0x00000002,
-    MemoryAccessNontemporalMask = 0x00000004,
-    MemoryAccessMakePointerAvailableMask = 0x00000008,
-    MemoryAccessMakePointerAvailableKHRMask = 0x00000008,
-    MemoryAccessMakePointerVisibleMask = 0x00000010,
-    MemoryAccessMakePointerVisibleKHRMask = 0x00000010,
-    MemoryAccessNonPrivatePointerMask = 0x00000020,
-    MemoryAccessNonPrivatePointerKHRMask = 0x00000020,
-};
-
-enum Scope {
-    ScopeCrossDevice = 0,
-    ScopeDevice = 1,
-    ScopeWorkgroup = 2,
-    ScopeSubgroup = 3,
-    ScopeInvocation = 4,
-    ScopeQueueFamily = 5,
-    ScopeQueueFamilyKHR = 5,
-    ScopeShaderCallKHR = 6,
-    ScopeMax = 0x7fffffff,
-};
-
-enum GroupOperation {
-    GroupOperationReduce = 0,
-    GroupOperationInclusiveScan = 1,
-    GroupOperationExclusiveScan = 2,
-    GroupOperationClusteredReduce = 3,
-    GroupOperationPartitionedReduceNV = 6,
-    GroupOperationPartitionedInclusiveScanNV = 7,
-    GroupOperationPartitionedExclusiveScanNV = 8,
-    GroupOperationMax = 0x7fffffff,
-};
-
-enum KernelEnqueueFlags {
-    KernelEnqueueFlagsNoWait = 0,
-    KernelEnqueueFlagsWaitKernel = 1,
-    KernelEnqueueFlagsWaitWorkGroup = 2,
-    KernelEnqueueFlagsMax = 0x7fffffff,
-};
-
-enum KernelProfilingInfoShift {
-    KernelProfilingInfoCmdExecTimeShift = 0,
-    KernelProfilingInfoMax = 0x7fffffff,
-};
-
-enum KernelProfilingInfoMask {
-    KernelProfilingInfoMaskNone = 0,
-    KernelProfilingInfoCmdExecTimeMask = 0x00000001,
-};
-
-enum Capability {
-    CapabilityMatrix = 0,
-    CapabilityShader = 1,
-    CapabilityGeometry = 2,
-    CapabilityTessellation = 3,
-    CapabilityAddresses = 4,
-    CapabilityLinkage = 5,
-    CapabilityKernel = 6,
-    CapabilityVector16 = 7,
-    CapabilityFloat16Buffer = 8,
-    CapabilityFloat16 = 9,
-    CapabilityFloat64 = 10,
-    CapabilityInt64 = 11,
-    CapabilityInt64Atomics = 12,
-    CapabilityImageBasic = 13,
-    CapabilityImageReadWrite = 14,
-    CapabilityImageMipmap = 15,
-    CapabilityPipes = 17,
-    CapabilityGroups = 18,
-    CapabilityDeviceEnqueue = 19,
-    CapabilityLiteralSampler = 20,
-    CapabilityAtomicStorage = 21,
-    CapabilityInt16 = 22,
-    CapabilityTessellationPointSize = 23,
-    CapabilityGeometryPointSize = 24,
-    CapabilityImageGatherExtended = 25,
-    CapabilityStorageImageMultisample = 27,
-    CapabilityUniformBufferArrayDynamicIndexing = 28,
-    CapabilitySampledImageArrayDynamicIndexing = 29,
-    CapabilityStorageBufferArrayDynamicIndexing = 30,
-    CapabilityStorageImageArrayDynamicIndexing = 31,
-    CapabilityClipDistance = 32,
-    CapabilityCullDistance = 33,
-    CapabilityImageCubeArray = 34,
-    CapabilitySampleRateShading = 35,
-    CapabilityImageRect = 36,
-    CapabilitySampledRect = 37,
-    CapabilityGenericPointer = 38,
-    CapabilityInt8 = 39,
-    CapabilityInputAttachment = 40,
-    CapabilitySparseResidency = 41,
-    CapabilityMinLod = 42,
-    CapabilitySampled1D = 43,
-    CapabilityImage1D = 44,
-    CapabilitySampledCubeArray = 45,
-    CapabilitySampledBuffer = 46,
-    CapabilityImageBuffer = 47,
-    CapabilityImageMSArray = 48,
-    CapabilityStorageImageExtendedFormats = 49,
-    CapabilityImageQuery = 50,
-    CapabilityDerivativeControl = 51,
-    CapabilityInterpolationFunction = 52,
-    CapabilityTransformFeedback = 53,
-    CapabilityGeometryStreams = 54,
-    CapabilityStorageImageReadWithoutFormat = 55,
-    CapabilityStorageImageWriteWithoutFormat = 56,
-    CapabilityMultiViewport = 57,
-    CapabilitySubgroupDispatch = 58,
-    CapabilityNamedBarrier = 59,
-    CapabilityPipeStorage = 60,
-    CapabilityGroupNonUniform = 61,
-    CapabilityGroupNonUniformVote = 62,
-    CapabilityGroupNonUniformArithmetic = 63,
-    CapabilityGroupNonUniformBallot = 64,
-    CapabilityGroupNonUniformShuffle = 65,
-    CapabilityGroupNonUniformShuffleRelative = 66,
-    CapabilityGroupNonUniformClustered = 67,
-    CapabilityGroupNonUniformQuad = 68,
-    CapabilityShaderLayer = 69,
-    CapabilityShaderViewportIndex = 70,
-    CapabilityFragmentShadingRateKHR = 4422,
-    CapabilitySubgroupBallotKHR = 4423,
-    CapabilityDrawParameters = 4427,
-    CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
-    CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
-    CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
-    CapabilitySubgroupVoteKHR = 4431,
-    CapabilityStorageBuffer16BitAccess = 4433,
-    CapabilityStorageUniformBufferBlock16 = 4433,
-    CapabilityStorageUniform16 = 4434,
-    CapabilityUniformAndStorageBuffer16BitAccess = 4434,
-    CapabilityStoragePushConstant16 = 4435,
-    CapabilityStorageInputOutput16 = 4436,
-    CapabilityDeviceGroup = 4437,
-    CapabilityMultiView = 4439,
-    CapabilityVariablePointersStorageBuffer = 4441,
-    CapabilityVariablePointers = 4442,
-    CapabilityAtomicStorageOps = 4445,
-    CapabilitySampleMaskPostDepthCoverage = 4447,
-    CapabilityStorageBuffer8BitAccess = 4448,
-    CapabilityUniformAndStorageBuffer8BitAccess = 4449,
-    CapabilityStoragePushConstant8 = 4450,
-    CapabilityDenormPreserve = 4464,
-    CapabilityDenormFlushToZero = 4465,
-    CapabilitySignedZeroInfNanPreserve = 4466,
-    CapabilityRoundingModeRTE = 4467,
-    CapabilityRoundingModeRTZ = 4468,
-    CapabilityRayQueryProvisionalKHR = 4471,
-    CapabilityRayQueryKHR = 4472,
-    CapabilityRayTraversalPrimitiveCullingKHR = 4478,
-    CapabilityRayTracingKHR = 4479,
-    CapabilityFloat16ImageAMD = 5008,
-    CapabilityImageGatherBiasLodAMD = 5009,
-    CapabilityFragmentMaskAMD = 5010,
-    CapabilityStencilExportEXT = 5013,
-    CapabilityImageReadWriteLodAMD = 5015,
-    CapabilityInt64ImageEXT = 5016,
-    CapabilityShaderClockKHR = 5055,
-    CapabilitySampleMaskOverrideCoverageNV = 5249,
-    CapabilityGeometryShaderPassthroughNV = 5251,
-    CapabilityShaderViewportIndexLayerEXT = 5254,
-    CapabilityShaderViewportIndexLayerNV = 5254,
-    CapabilityShaderViewportMaskNV = 5255,
-    CapabilityShaderStereoViewNV = 5259,
-    CapabilityPerViewAttributesNV = 5260,
-    CapabilityFragmentFullyCoveredEXT = 5265,
-    CapabilityMeshShadingNV = 5266,
-    CapabilityImageFootprintNV = 5282,
-    CapabilityFragmentBarycentricNV = 5284,
-    CapabilityComputeDerivativeGroupQuadsNV = 5288,
-    CapabilityFragmentDensityEXT = 5291,
-    CapabilityShadingRateNV = 5291,
-    CapabilityGroupNonUniformPartitionedNV = 5297,
-    CapabilityShaderNonUniform = 5301,
-    CapabilityShaderNonUniformEXT = 5301,
-    CapabilityRuntimeDescriptorArray = 5302,
-    CapabilityRuntimeDescriptorArrayEXT = 5302,
-    CapabilityInputAttachmentArrayDynamicIndexing = 5303,
-    CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
-    CapabilityUniformTexelBufferArrayDynamicIndexing = 5304,
-    CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
-    CapabilityStorageTexelBufferArrayDynamicIndexing = 5305,
-    CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
-    CapabilityUniformBufferArrayNonUniformIndexing = 5306,
-    CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
-    CapabilitySampledImageArrayNonUniformIndexing = 5307,
-    CapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
-    CapabilityStorageBufferArrayNonUniformIndexing = 5308,
-    CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
-    CapabilityStorageImageArrayNonUniformIndexing = 5309,
-    CapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
-    CapabilityInputAttachmentArrayNonUniformIndexing = 5310,
-    CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
-    CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311,
-    CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
-    CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
-    CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
-    CapabilityRayTracingNV = 5340,
-    CapabilityRayTracingMotionBlurNV = 5341,
-    CapabilityVulkanMemoryModel = 5345,
-    CapabilityVulkanMemoryModelKHR = 5345,
-    CapabilityVulkanMemoryModelDeviceScope = 5346,
-    CapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
-    CapabilityPhysicalStorageBufferAddresses = 5347,
-    CapabilityPhysicalStorageBufferAddressesEXT = 5347,
-    CapabilityComputeDerivativeGroupLinearNV = 5350,
-    CapabilityRayTracingProvisionalKHR = 5353,
-    CapabilityCooperativeMatrixNV = 5357,
-    CapabilityFragmentShaderSampleInterlockEXT = 5363,
-    CapabilityFragmentShaderShadingRateInterlockEXT = 5372,
-    CapabilityShaderSMBuiltinsNV = 5373,
-    CapabilityFragmentShaderPixelInterlockEXT = 5378,
-    CapabilityDemoteToHelperInvocationEXT = 5379,
-    CapabilitySubgroupShuffleINTEL = 5568,
-    CapabilitySubgroupBufferBlockIOINTEL = 5569,
-    CapabilitySubgroupImageBlockIOINTEL = 5570,
-    CapabilitySubgroupImageMediaBlockIOINTEL = 5579,
-    CapabilityRoundToInfinityINTEL = 5582,
-    CapabilityFloatingPointModeINTEL = 5583,
-    CapabilityIntegerFunctions2INTEL = 5584,
-    CapabilityFunctionPointersINTEL = 5603,
-    CapabilityIndirectReferencesINTEL = 5604,
-    CapabilityAsmINTEL = 5606,
-    CapabilityAtomicFloat32MinMaxEXT = 5612,
-    CapabilityAtomicFloat64MinMaxEXT = 5613,
-    CapabilityAtomicFloat16MinMaxEXT = 5616,
-    CapabilityVectorComputeINTEL = 5617,
-    CapabilityVectorAnyINTEL = 5619,
-    CapabilityExpectAssumeKHR = 5629,
-    CapabilitySubgroupAvcMotionEstimationINTEL = 5696,
-    CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
-    CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
-    CapabilityVariableLengthArrayINTEL = 5817,
-    CapabilityFunctionFloatControlINTEL = 5821,
-    CapabilityFPGAMemoryAttributesINTEL = 5824,
-    CapabilityFPFastMathModeINTEL = 5837,
-    CapabilityArbitraryPrecisionIntegersINTEL = 5844,
-    CapabilityUnstructuredLoopControlsINTEL = 5886,
-    CapabilityFPGALoopControlsINTEL = 5888,
-    CapabilityKernelAttributesINTEL = 5892,
-    CapabilityFPGAKernelAttributesINTEL = 5897,
-    CapabilityFPGAMemoryAccessesINTEL = 5898,
-    CapabilityFPGAClusterAttributesINTEL = 5904,
-    CapabilityLoopFuseINTEL = 5906,
-    CapabilityFPGABufferLocationINTEL = 5920,
-    CapabilityUSMStorageClassesINTEL = 5935,
-    CapabilityIOPipesINTEL = 5943,
-    CapabilityBlockingPipesINTEL = 5945,
-    CapabilityFPGARegINTEL = 5948,
-    CapabilityAtomicFloat32AddEXT = 6033,
-    CapabilityAtomicFloat64AddEXT = 6034,
-    CapabilityLongConstantCompositeINTEL = 6089,
-    CapabilityAtomicFloat16AddEXT = 6095,
-    CapabilityMax = 0x7fffffff,
-};
-
-enum RayFlagsShift {
-    RayFlagsOpaqueKHRShift = 0,
-    RayFlagsNoOpaqueKHRShift = 1,
-    RayFlagsTerminateOnFirstHitKHRShift = 2,
-    RayFlagsSkipClosestHitShaderKHRShift = 3,
-    RayFlagsCullBackFacingTrianglesKHRShift = 4,
-    RayFlagsCullFrontFacingTrianglesKHRShift = 5,
-    RayFlagsCullOpaqueKHRShift = 6,
-    RayFlagsCullNoOpaqueKHRShift = 7,
-    RayFlagsSkipTrianglesKHRShift = 8,
-    RayFlagsSkipAABBsKHRShift = 9,
-    RayFlagsMax = 0x7fffffff,
-};
-
-enum RayFlagsMask {
-    RayFlagsMaskNone = 0,
-    RayFlagsOpaqueKHRMask = 0x00000001,
-    RayFlagsNoOpaqueKHRMask = 0x00000002,
-    RayFlagsTerminateOnFirstHitKHRMask = 0x00000004,
-    RayFlagsSkipClosestHitShaderKHRMask = 0x00000008,
-    RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010,
-    RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020,
-    RayFlagsCullOpaqueKHRMask = 0x00000040,
-    RayFlagsCullNoOpaqueKHRMask = 0x00000080,
-    RayFlagsSkipTrianglesKHRMask = 0x00000100,
-    RayFlagsSkipAABBsKHRMask = 0x00000200,
-};
-
-enum RayQueryIntersection {
-    RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0,
-    RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1,
-    RayQueryIntersectionMax = 0x7fffffff,
-};
-
-enum RayQueryCommittedIntersectionType {
-    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0,
-    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1,
-    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2,
-    RayQueryCommittedIntersectionTypeMax = 0x7fffffff,
-};
-
-enum RayQueryCandidateIntersectionType {
-    RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0,
-    RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1,
-    RayQueryCandidateIntersectionTypeMax = 0x7fffffff,
-};
-
-enum FragmentShadingRateShift {
-    FragmentShadingRateVertical2PixelsShift = 0,
-    FragmentShadingRateVertical4PixelsShift = 1,
-    FragmentShadingRateHorizontal2PixelsShift = 2,
-    FragmentShadingRateHorizontal4PixelsShift = 3,
-    FragmentShadingRateMax = 0x7fffffff,
-};
-
-enum FragmentShadingRateMask {
-    FragmentShadingRateMaskNone = 0,
-    FragmentShadingRateVertical2PixelsMask = 0x00000001,
-    FragmentShadingRateVertical4PixelsMask = 0x00000002,
-    FragmentShadingRateHorizontal2PixelsMask = 0x00000004,
-    FragmentShadingRateHorizontal4PixelsMask = 0x00000008,
-};
-
-enum FPDenormMode {
-    FPDenormModePreserve = 0,
-    FPDenormModeFlushToZero = 1,
-    FPDenormModeMax = 0x7fffffff,
-};
-
-enum FPOperationMode {
-    FPOperationModeIEEE = 0,
-    FPOperationModeALT = 1,
-    FPOperationModeMax = 0x7fffffff,
-};
-
-enum Op {
-    OpNop = 0,
-    OpUndef = 1,
-    OpSourceContinued = 2,
-    OpSource = 3,
-    OpSourceExtension = 4,
-    OpName = 5,
-    OpMemberName = 6,
-    OpString = 7,
-    OpLine = 8,
-    OpExtension = 10,
-    OpExtInstImport = 11,
-    OpExtInst = 12,
-    OpMemoryModel = 14,
-    OpEntryPoint = 15,
-    OpExecutionMode = 16,
-    OpCapability = 17,
-    OpTypeVoid = 19,
-    OpTypeBool = 20,
-    OpTypeInt = 21,
-    OpTypeFloat = 22,
-    OpTypeVector = 23,
-    OpTypeMatrix = 24,
-    OpTypeImage = 25,
-    OpTypeSampler = 26,
-    OpTypeSampledImage = 27,
-    OpTypeArray = 28,
-    OpTypeRuntimeArray = 29,
-    OpTypeStruct = 30,
-    OpTypeOpaque = 31,
-    OpTypePointer = 32,
-    OpTypeFunction = 33,
-    OpTypeEvent = 34,
-    OpTypeDeviceEvent = 35,
-    OpTypeReserveId = 36,
-    OpTypeQueue = 37,
-    OpTypePipe = 38,
-    OpTypeForwardPointer = 39,
-    OpConstantTrue = 41,
-    OpConstantFalse = 42,
-    OpConstant = 43,
-    OpConstantComposite = 44,
-    OpConstantSampler = 45,
-    OpConstantNull = 46,
-    OpSpecConstantTrue = 48,
-    OpSpecConstantFalse = 49,
-    OpSpecConstant = 50,
-    OpSpecConstantComposite = 51,
-    OpSpecConstantOp = 52,
-    OpFunction = 54,
-    OpFunctionParameter = 55,
-    OpFunctionEnd = 56,
-    OpFunctionCall = 57,
-    OpVariable = 59,
-    OpImageTexelPointer = 60,
-    OpLoad = 61,
-    OpStore = 62,
-    OpCopyMemory = 63,
-    OpCopyMemorySized = 64,
-    OpAccessChain = 65,
-    OpInBoundsAccessChain = 66,
-    OpPtrAccessChain = 67,
-    OpArrayLength = 68,
-    OpGenericPtrMemSemantics = 69,
-    OpInBoundsPtrAccessChain = 70,
-    OpDecorate = 71,
-    OpMemberDecorate = 72,
-    OpDecorationGroup = 73,
-    OpGroupDecorate = 74,
-    OpGroupMemberDecorate = 75,
-    OpVectorExtractDynamic = 77,
-    OpVectorInsertDynamic = 78,
-    OpVectorShuffle = 79,
-    OpCompositeConstruct = 80,
-    OpCompositeExtract = 81,
-    OpCompositeInsert = 82,
-    OpCopyObject = 83,
-    OpTranspose = 84,
-    OpSampledImage = 86,
-    OpImageSampleImplicitLod = 87,
-    OpImageSampleExplicitLod = 88,
-    OpImageSampleDrefImplicitLod = 89,
-    OpImageSampleDrefExplicitLod = 90,
-    OpImageSampleProjImplicitLod = 91,
-    OpImageSampleProjExplicitLod = 92,
-    OpImageSampleProjDrefImplicitLod = 93,
-    OpImageSampleProjDrefExplicitLod = 94,
-    OpImageFetch = 95,
-    OpImageGather = 96,
-    OpImageDrefGather = 97,
-    OpImageRead = 98,
-    OpImageWrite = 99,
-    OpImage = 100,
-    OpImageQueryFormat = 101,
-    OpImageQueryOrder = 102,
-    OpImageQuerySizeLod = 103,
-    OpImageQuerySize = 104,
-    OpImageQueryLod = 105,
-    OpImageQueryLevels = 106,
-    OpImageQuerySamples = 107,
-    OpConvertFToU = 109,
-    OpConvertFToS = 110,
-    OpConvertSToF = 111,
-    OpConvertUToF = 112,
-    OpUConvert = 113,
-    OpSConvert = 114,
-    OpFConvert = 115,
-    OpQuantizeToF16 = 116,
-    OpConvertPtrToU = 117,
-    OpSatConvertSToU = 118,
-    OpSatConvertUToS = 119,
-    OpConvertUToPtr = 120,
-    OpPtrCastToGeneric = 121,
-    OpGenericCastToPtr = 122,
-    OpGenericCastToPtrExplicit = 123,
-    OpBitcast = 124,
-    OpSNegate = 126,
-    OpFNegate = 127,
-    OpIAdd = 128,
-    OpFAdd = 129,
-    OpISub = 130,
-    OpFSub = 131,
-    OpIMul = 132,
-    OpFMul = 133,
-    OpUDiv = 134,
-    OpSDiv = 135,
-    OpFDiv = 136,
-    OpUMod = 137,
-    OpSRem = 138,
-    OpSMod = 139,
-    OpFRem = 140,
-    OpFMod = 141,
-    OpVectorTimesScalar = 142,
-    OpMatrixTimesScalar = 143,
-    OpVectorTimesMatrix = 144,
-    OpMatrixTimesVector = 145,
-    OpMatrixTimesMatrix = 146,
-    OpOuterProduct = 147,
-    OpDot = 148,
-    OpIAddCarry = 149,
-    OpISubBorrow = 150,
-    OpUMulExtended = 151,
-    OpSMulExtended = 152,
-    OpAny = 154,
-    OpAll = 155,
-    OpIsNan = 156,
-    OpIsInf = 157,
-    OpIsFinite = 158,
-    OpIsNormal = 159,
-    OpSignBitSet = 160,
-    OpLessOrGreater = 161,
-    OpOrdered = 162,
-    OpUnordered = 163,
-    OpLogicalEqual = 164,
-    OpLogicalNotEqual = 165,
-    OpLogicalOr = 166,
-    OpLogicalAnd = 167,
-    OpLogicalNot = 168,
-    OpSelect = 169,
-    OpIEqual = 170,
-    OpINotEqual = 171,
-    OpUGreaterThan = 172,
-    OpSGreaterThan = 173,
-    OpUGreaterThanEqual = 174,
-    OpSGreaterThanEqual = 175,
-    OpULessThan = 176,
-    OpSLessThan = 177,
-    OpULessThanEqual = 178,
-    OpSLessThanEqual = 179,
-    OpFOrdEqual = 180,
-    OpFUnordEqual = 181,
-    OpFOrdNotEqual = 182,
-    OpFUnordNotEqual = 183,
-    OpFOrdLessThan = 184,
-    OpFUnordLessThan = 185,
-    OpFOrdGreaterThan = 186,
-    OpFUnordGreaterThan = 187,
-    OpFOrdLessThanEqual = 188,
-    OpFUnordLessThanEqual = 189,
-    OpFOrdGreaterThanEqual = 190,
-    OpFUnordGreaterThanEqual = 191,
-    OpShiftRightLogical = 194,
-    OpShiftRightArithmetic = 195,
-    OpShiftLeftLogical = 196,
-    OpBitwiseOr = 197,
-    OpBitwiseXor = 198,
-    OpBitwiseAnd = 199,
-    OpNot = 200,
-    OpBitFieldInsert = 201,
-    OpBitFieldSExtract = 202,
-    OpBitFieldUExtract = 203,
-    OpBitReverse = 204,
-    OpBitCount = 205,
-    OpDPdx = 207,
-    OpDPdy = 208,
-    OpFwidth = 209,
-    OpDPdxFine = 210,
-    OpDPdyFine = 211,
-    OpFwidthFine = 212,
-    OpDPdxCoarse = 213,
-    OpDPdyCoarse = 214,
-    OpFwidthCoarse = 215,
-    OpEmitVertex = 218,
-    OpEndPrimitive = 219,
-    OpEmitStreamVertex = 220,
-    OpEndStreamPrimitive = 221,
-    OpControlBarrier = 224,
-    OpMemoryBarrier = 225,
-    OpAtomicLoad = 227,
-    OpAtomicStore = 228,
-    OpAtomicExchange = 229,
-    OpAtomicCompareExchange = 230,
-    OpAtomicCompareExchangeWeak = 231,
-    OpAtomicIIncrement = 232,
-    OpAtomicIDecrement = 233,
-    OpAtomicIAdd = 234,
-    OpAtomicISub = 235,
-    OpAtomicSMin = 236,
-    OpAtomicUMin = 237,
-    OpAtomicSMax = 238,
-    OpAtomicUMax = 239,
-    OpAtomicAnd = 240,
-    OpAtomicOr = 241,
-    OpAtomicXor = 242,
-    OpPhi = 245,
-    OpLoopMerge = 246,
-    OpSelectionMerge = 247,
-    OpLabel = 248,
-    OpBranch = 249,
-    OpBranchConditional = 250,
-    OpSwitch = 251,
-    OpKill = 252,
-    OpReturn = 253,
-    OpReturnValue = 254,
-    OpUnreachable = 255,
-    OpLifetimeStart = 256,
-    OpLifetimeStop = 257,
-    OpGroupAsyncCopy = 259,
-    OpGroupWaitEvents = 260,
-    OpGroupAll = 261,
-    OpGroupAny = 262,
-    OpGroupBroadcast = 263,
-    OpGroupIAdd = 264,
-    OpGroupFAdd = 265,
-    OpGroupFMin = 266,
-    OpGroupUMin = 267,
-    OpGroupSMin = 268,
-    OpGroupFMax = 269,
-    OpGroupUMax = 270,
-    OpGroupSMax = 271,
-    OpReadPipe = 274,
-    OpWritePipe = 275,
-    OpReservedReadPipe = 276,
-    OpReservedWritePipe = 277,
-    OpReserveReadPipePackets = 278,
-    OpReserveWritePipePackets = 279,
-    OpCommitReadPipe = 280,
-    OpCommitWritePipe = 281,
-    OpIsValidReserveId = 282,
-    OpGetNumPipePackets = 283,
-    OpGetMaxPipePackets = 284,
-    OpGroupReserveReadPipePackets = 285,
-    OpGroupReserveWritePipePackets = 286,
-    OpGroupCommitReadPipe = 287,
-    OpGroupCommitWritePipe = 288,
-    OpEnqueueMarker = 291,
-    OpEnqueueKernel = 292,
-    OpGetKernelNDrangeSubGroupCount = 293,
-    OpGetKernelNDrangeMaxSubGroupSize = 294,
-    OpGetKernelWorkGroupSize = 295,
-    OpGetKernelPreferredWorkGroupSizeMultiple = 296,
-    OpRetainEvent = 297,
-    OpReleaseEvent = 298,
-    OpCreateUserEvent = 299,
-    OpIsValidEvent = 300,
-    OpSetUserEventStatus = 301,
-    OpCaptureEventProfilingInfo = 302,
-    OpGetDefaultQueue = 303,
-    OpBuildNDRange = 304,
-    OpImageSparseSampleImplicitLod = 305,
-    OpImageSparseSampleExplicitLod = 306,
-    OpImageSparseSampleDrefImplicitLod = 307,
-    OpImageSparseSampleDrefExplicitLod = 308,
-    OpImageSparseSampleProjImplicitLod = 309,
-    OpImageSparseSampleProjExplicitLod = 310,
-    OpImageSparseSampleProjDrefImplicitLod = 311,
-    OpImageSparseSampleProjDrefExplicitLod = 312,
-    OpImageSparseFetch = 313,
-    OpImageSparseGather = 314,
-    OpImageSparseDrefGather = 315,
-    OpImageSparseTexelsResident = 316,
-    OpNoLine = 317,
-    OpAtomicFlagTestAndSet = 318,
-    OpAtomicFlagClear = 319,
-    OpImageSparseRead = 320,
-    OpSizeOf = 321,
-    OpTypePipeStorage = 322,
-    OpConstantPipeStorage = 323,
-    OpCreatePipeFromPipeStorage = 324,
-    OpGetKernelLocalSizeForSubgroupCount = 325,
-    OpGetKernelMaxNumSubgroups = 326,
-    OpTypeNamedBarrier = 327,
-    OpNamedBarrierInitialize = 328,
-    OpMemoryNamedBarrier = 329,
-    OpModuleProcessed = 330,
-    OpExecutionModeId = 331,
-    OpDecorateId = 332,
-    OpGroupNonUniformElect = 333,
-    OpGroupNonUniformAll = 334,
-    OpGroupNonUniformAny = 335,
-    OpGroupNonUniformAllEqual = 336,
-    OpGroupNonUniformBroadcast = 337,
-    OpGroupNonUniformBroadcastFirst = 338,
-    OpGroupNonUniformBallot = 339,
-    OpGroupNonUniformInverseBallot = 340,
-    OpGroupNonUniformBallotBitExtract = 341,
-    OpGroupNonUniformBallotBitCount = 342,
-    OpGroupNonUniformBallotFindLSB = 343,
-    OpGroupNonUniformBallotFindMSB = 344,
-    OpGroupNonUniformShuffle = 345,
-    OpGroupNonUniformShuffleXor = 346,
-    OpGroupNonUniformShuffleUp = 347,
-    OpGroupNonUniformShuffleDown = 348,
-    OpGroupNonUniformIAdd = 349,
-    OpGroupNonUniformFAdd = 350,
-    OpGroupNonUniformIMul = 351,
-    OpGroupNonUniformFMul = 352,
-    OpGroupNonUniformSMin = 353,
-    OpGroupNonUniformUMin = 354,
-    OpGroupNonUniformFMin = 355,
-    OpGroupNonUniformSMax = 356,
-    OpGroupNonUniformUMax = 357,
-    OpGroupNonUniformFMax = 358,
-    OpGroupNonUniformBitwiseAnd = 359,
-    OpGroupNonUniformBitwiseOr = 360,
-    OpGroupNonUniformBitwiseXor = 361,
-    OpGroupNonUniformLogicalAnd = 362,
-    OpGroupNonUniformLogicalOr = 363,
-    OpGroupNonUniformLogicalXor = 364,
-    OpGroupNonUniformQuadBroadcast = 365,
-    OpGroupNonUniformQuadSwap = 366,
-    OpCopyLogical = 400,
-    OpPtrEqual = 401,
-    OpPtrNotEqual = 402,
-    OpPtrDiff = 403,
-    OpTerminateInvocation = 4416,
-    OpSubgroupBallotKHR = 4421,
-    OpSubgroupFirstInvocationKHR = 4422,
-    OpSubgroupAllKHR = 4428,
-    OpSubgroupAnyKHR = 4429,
-    OpSubgroupAllEqualKHR = 4430,
-    OpSubgroupReadInvocationKHR = 4432,
-    OpTraceRayKHR = 4445,
-    OpExecuteCallableKHR = 4446,
-    OpConvertUToAccelerationStructureKHR = 4447,
-    OpIgnoreIntersectionKHR = 4448,
-    OpTerminateRayKHR = 4449,
-    OpTypeRayQueryKHR = 4472,
-    OpRayQueryInitializeKHR = 4473,
-    OpRayQueryTerminateKHR = 4474,
-    OpRayQueryGenerateIntersectionKHR = 4475,
-    OpRayQueryConfirmIntersectionKHR = 4476,
-    OpRayQueryProceedKHR = 4477,
-    OpRayQueryGetIntersectionTypeKHR = 4479,
-    OpGroupIAddNonUniformAMD = 5000,
-    OpGroupFAddNonUniformAMD = 5001,
-    OpGroupFMinNonUniformAMD = 5002,
-    OpGroupUMinNonUniformAMD = 5003,
-    OpGroupSMinNonUniformAMD = 5004,
-    OpGroupFMaxNonUniformAMD = 5005,
-    OpGroupUMaxNonUniformAMD = 5006,
-    OpGroupSMaxNonUniformAMD = 5007,
-    OpFragmentMaskFetchAMD = 5011,
-    OpFragmentFetchAMD = 5012,
-    OpReadClockKHR = 5056,
-    OpImageSampleFootprintNV = 5283,
-    OpGroupNonUniformPartitionNV = 5296,
-    OpWritePackedPrimitiveIndices4x8NV = 5299,
-    OpReportIntersectionKHR = 5334,
-    OpReportIntersectionNV = 5334,
-    OpIgnoreIntersectionNV = 5335,
-    OpTerminateRayNV = 5336,
-    OpTraceNV = 5337,
-    OpTraceMotionNV = 5338,
-    OpTraceRayMotionNV = 5339,
-    OpTypeAccelerationStructureKHR = 5341,
-    OpTypeAccelerationStructureNV = 5341,
-    OpExecuteCallableNV = 5344,
-    OpTypeCooperativeMatrixNV = 5358,
-    OpCooperativeMatrixLoadNV = 5359,
-    OpCooperativeMatrixStoreNV = 5360,
-    OpCooperativeMatrixMulAddNV = 5361,
-    OpCooperativeMatrixLengthNV = 5362,
-    OpBeginInvocationInterlockEXT = 5364,
-    OpEndInvocationInterlockEXT = 5365,
-    OpDemoteToHelperInvocationEXT = 5380,
-    OpIsHelperInvocationEXT = 5381,
-    OpSubgroupShuffleINTEL = 5571,
-    OpSubgroupShuffleDownINTEL = 5572,
-    OpSubgroupShuffleUpINTEL = 5573,
-    OpSubgroupShuffleXorINTEL = 5574,
-    OpSubgroupBlockReadINTEL = 5575,
-    OpSubgroupBlockWriteINTEL = 5576,
-    OpSubgroupImageBlockReadINTEL = 5577,
-    OpSubgroupImageBlockWriteINTEL = 5578,
-    OpSubgroupImageMediaBlockReadINTEL = 5580,
-    OpSubgroupImageMediaBlockWriteINTEL = 5581,
-    OpUCountLeadingZerosINTEL = 5585,
-    OpUCountTrailingZerosINTEL = 5586,
-    OpAbsISubINTEL = 5587,
-    OpAbsUSubINTEL = 5588,
-    OpIAddSatINTEL = 5589,
-    OpUAddSatINTEL = 5590,
-    OpIAverageINTEL = 5591,
-    OpUAverageINTEL = 5592,
-    OpIAverageRoundedINTEL = 5593,
-    OpUAverageRoundedINTEL = 5594,
-    OpISubSatINTEL = 5595,
-    OpUSubSatINTEL = 5596,
-    OpIMul32x16INTEL = 5597,
-    OpUMul32x16INTEL = 5598,
-    OpConstantFunctionPointerINTEL = 5600,
-    OpFunctionPointerCallINTEL = 5601,
-    OpAsmTargetINTEL = 5609,
-    OpAsmINTEL = 5610,
-    OpAsmCallINTEL = 5611,
-    OpAtomicFMinEXT = 5614,
-    OpAtomicFMaxEXT = 5615,
-    OpAssumeTrueKHR = 5630,
-    OpExpectKHR = 5631,
-    OpDecorateString = 5632,
-    OpDecorateStringGOOGLE = 5632,
-    OpMemberDecorateString = 5633,
-    OpMemberDecorateStringGOOGLE = 5633,
-    OpVmeImageINTEL = 5699,
-    OpTypeVmeImageINTEL = 5700,
-    OpTypeAvcImePayloadINTEL = 5701,
-    OpTypeAvcRefPayloadINTEL = 5702,
-    OpTypeAvcSicPayloadINTEL = 5703,
-    OpTypeAvcMcePayloadINTEL = 5704,
-    OpTypeAvcMceResultINTEL = 5705,
-    OpTypeAvcImeResultINTEL = 5706,
-    OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,
-    OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,
-    OpTypeAvcImeSingleReferenceStreaminINTEL = 5709,
-    OpTypeAvcImeDualReferenceStreaminINTEL = 5710,
-    OpTypeAvcRefResultINTEL = 5711,
-    OpTypeAvcSicResultINTEL = 5712,
-    OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,
-    OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,
-    OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,
-    OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,
-    OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,
-    OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,
-    OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,
-    OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,
-    OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,
-    OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,
-    OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,
-    OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,
-    OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,
-    OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,
-    OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,
-    OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,
-    OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,
-    OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,
-    OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,
-    OpSubgroupAvcMceConvertToImePayloadINTEL = 5732,
-    OpSubgroupAvcMceConvertToImeResultINTEL = 5733,
-    OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,
-    OpSubgroupAvcMceConvertToRefResultINTEL = 5735,
-    OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,
-    OpSubgroupAvcMceConvertToSicResultINTEL = 5737,
-    OpSubgroupAvcMceGetMotionVectorsINTEL = 5738,
-    OpSubgroupAvcMceGetInterDistortionsINTEL = 5739,
-    OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,
-    OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,
-    OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,
-    OpSubgroupAvcMceGetInterDirectionsINTEL = 5743,
-    OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,
-    OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,
-    OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,
-    OpSubgroupAvcImeInitializeINTEL = 5747,
-    OpSubgroupAvcImeSetSingleReferenceINTEL = 5748,
-    OpSubgroupAvcImeSetDualReferenceINTEL = 5749,
-    OpSubgroupAvcImeRefWindowSizeINTEL = 5750,
-    OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,
-    OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,
-    OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,
-    OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,
-    OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,
-    OpSubgroupAvcImeSetWeightedSadINTEL = 5756,
-    OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,
-    OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,
-    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,
-    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,
-    OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,
-    OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,
-    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,
-    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,
-    OpSubgroupAvcImeConvertToMceResultINTEL = 5765,
-    OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,
-    OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,
-    OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,
-    OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,
-    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770,
-    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771,
-    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772,
-    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773,
-    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,
-    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775,
-    OpSubgroupAvcImeGetBorderReachedINTEL = 5776,
-    OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,
-    OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,
-    OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,
-    OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,
-    OpSubgroupAvcFmeInitializeINTEL = 5781,
-    OpSubgroupAvcBmeInitializeINTEL = 5782,
-    OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,
-    OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,
-    OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,
-    OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,
-    OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,
-    OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,
-    OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,
-    OpSubgroupAvcRefConvertToMceResultINTEL = 5790,
-    OpSubgroupAvcSicInitializeINTEL = 5791,
-    OpSubgroupAvcSicConfigureSkcINTEL = 5792,
-    OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,
-    OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,
-    OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,
-    OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,
-    OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,
-    OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,
-    OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,
-    OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,
-    OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,
-    OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,
-    OpSubgroupAvcSicEvaluateIpeINTEL = 5803,
-    OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,
-    OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,
-    OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,
-    OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,
-    OpSubgroupAvcSicConvertToMceResultINTEL = 5808,
-    OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,
-    OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,
-    OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,
-    OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,
-    OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,
-    OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
-    OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
-    OpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
-    OpVariableLengthArrayINTEL = 5818,
-    OpSaveMemoryINTEL = 5819,
-    OpRestoreMemoryINTEL = 5820,
-    OpLoopControlINTEL = 5887,
-    OpPtrCastToCrossWorkgroupINTEL = 5934,
-    OpCrossWorkgroupCastToPtrINTEL = 5938,
-    OpReadPipeBlockingINTEL = 5946,
-    OpWritePipeBlockingINTEL = 5947,
-    OpFPGARegINTEL = 5949,
-    OpRayQueryGetRayTMinKHR = 6016,
-    OpRayQueryGetRayFlagsKHR = 6017,
-    OpRayQueryGetIntersectionTKHR = 6018,
-    OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019,
-    OpRayQueryGetIntersectionInstanceIdKHR = 6020,
-    OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,
-    OpRayQueryGetIntersectionGeometryIndexKHR = 6022,
-    OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023,
-    OpRayQueryGetIntersectionBarycentricsKHR = 6024,
-    OpRayQueryGetIntersectionFrontFaceKHR = 6025,
-    OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,
-    OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027,
-    OpRayQueryGetIntersectionObjectRayOriginKHR = 6028,
-    OpRayQueryGetWorldRayDirectionKHR = 6029,
-    OpRayQueryGetWorldRayOriginKHR = 6030,
-    OpRayQueryGetIntersectionObjectToWorldKHR = 6031,
-    OpRayQueryGetIntersectionWorldToObjectKHR = 6032,
-    OpAtomicFAddEXT = 6035,
-    OpTypeBufferSurfaceINTEL = 6086,
-    OpTypeStructContinuedINTEL = 6090,
-    OpConstantCompositeContinuedINTEL = 6091,
-    OpSpecConstantCompositeContinuedINTEL = 6092,
-    OpMax = 0x7fffffff,
-};
-
-#ifdef SPV_ENABLE_UTILITY_CODE
-inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
-    *hasResult = *hasResultType = false;
-    switch (opcode) {
-    default: /* unknown opcode */ break;
-    case OpNop: *hasResult = false; *hasResultType = false; break;
-    case OpUndef: *hasResult = true; *hasResultType = true; break;
-    case OpSourceContinued: *hasResult = false; *hasResultType = false; break;
-    case OpSource: *hasResult = false; *hasResultType = false; break;
-    case OpSourceExtension: *hasResult = false; *hasResultType = false; break;
-    case OpName: *hasResult = false; *hasResultType = false; break;
-    case OpMemberName: *hasResult = false; *hasResultType = false; break;
-    case OpString: *hasResult = true; *hasResultType = false; break;
-    case OpLine: *hasResult = false; *hasResultType = false; break;
-    case OpExtension: *hasResult = false; *hasResultType = false; break;
-    case OpExtInstImport: *hasResult = true; *hasResultType = false; break;
-    case OpExtInst: *hasResult = true; *hasResultType = true; break;
-    case OpMemoryModel: *hasResult = false; *hasResultType = false; break;
-    case OpEntryPoint: *hasResult = false; *hasResultType = false; break;
-    case OpExecutionMode: *hasResult = false; *hasResultType = false; break;
-    case OpCapability: *hasResult = false; *hasResultType = false; break;
-    case OpTypeVoid: *hasResult = true; *hasResultType = false; break;
-    case OpTypeBool: *hasResult = true; *hasResultType = false; break;
-    case OpTypeInt: *hasResult = true; *hasResultType = false; break;
-    case OpTypeFloat: *hasResult = true; *hasResultType = false; break;
-    case OpTypeVector: *hasResult = true; *hasResultType = false; break;
-    case OpTypeMatrix: *hasResult = true; *hasResultType = false; break;
-    case OpTypeImage: *hasResult = true; *hasResultType = false; break;
-    case OpTypeSampler: *hasResult = true; *hasResultType = false; break;
-    case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
-    case OpTypeArray: *hasResult = true; *hasResultType = false; break;
-    case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
-    case OpTypeStruct: *hasResult = true; *hasResultType = false; break;
-    case OpTypeOpaque: *hasResult = true; *hasResultType = false; break;
-    case OpTypePointer: *hasResult = true; *hasResultType = false; break;
-    case OpTypeFunction: *hasResult = true; *hasResultType = false; break;
-    case OpTypeEvent: *hasResult = true; *hasResultType = false; break;
-    case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
-    case OpTypeReserveId: *hasResult = true; *hasResultType = false; break;
-    case OpTypeQueue: *hasResult = true; *hasResultType = false; break;
-    case OpTypePipe: *hasResult = true; *hasResultType = false; break;
-    case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
-    case OpConstantTrue: *hasResult = true; *hasResultType = true; break;
-    case OpConstantFalse: *hasResult = true; *hasResultType = true; break;
-    case OpConstant: *hasResult = true; *hasResultType = true; break;
-    case OpConstantComposite: *hasResult = true; *hasResultType = true; break;
-    case OpConstantSampler: *hasResult = true; *hasResultType = true; break;
-    case OpConstantNull: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstant: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
-    case OpFunction: *hasResult = true; *hasResultType = true; break;
-    case OpFunctionParameter: *hasResult = true; *hasResultType = true; break;
-    case OpFunctionEnd: *hasResult = false; *hasResultType = false; break;
-    case OpFunctionCall: *hasResult = true; *hasResultType = true; break;
-    case OpVariable: *hasResult = true; *hasResultType = true; break;
-    case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
-    case OpLoad: *hasResult = true; *hasResultType = true; break;
-    case OpStore: *hasResult = false; *hasResultType = false; break;
-    case OpCopyMemory: *hasResult = false; *hasResultType = false; break;
-    case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
-    case OpAccessChain: *hasResult = true; *hasResultType = true; break;
-    case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
-    case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
-    case OpArrayLength: *hasResult = true; *hasResultType = true; break;
-    case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
-    case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
-    case OpDecorate: *hasResult = false; *hasResultType = false; break;
-    case OpMemberDecorate: *hasResult = false; *hasResultType = false; break;
-    case OpDecorationGroup: *hasResult = true; *hasResultType = false; break;
-    case OpGroupDecorate: *hasResult = false; *hasResultType = false; break;
-    case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
-    case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
-    case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
-    case OpVectorShuffle: *hasResult = true; *hasResultType = true; break;
-    case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
-    case OpCompositeExtract: *hasResult = true; *hasResultType = true; break;
-    case OpCompositeInsert: *hasResult = true; *hasResultType = true; break;
-    case OpCopyObject: *hasResult = true; *hasResultType = true; break;
-    case OpTranspose: *hasResult = true; *hasResultType = true; break;
-    case OpSampledImage: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageFetch: *hasResult = true; *hasResultType = true; break;
-    case OpImageGather: *hasResult = true; *hasResultType = true; break;
-    case OpImageDrefGather: *hasResult = true; *hasResultType = true; break;
-    case OpImageRead: *hasResult = true; *hasResultType = true; break;
-    case OpImageWrite: *hasResult = false; *hasResultType = false; break;
-    case OpImage: *hasResult = true; *hasResultType = true; break;
-    case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
-    case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
-    case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageQuerySize: *hasResult = true; *hasResultType = true; break;
-    case OpImageQueryLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
-    case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
-    case OpConvertFToU: *hasResult = true; *hasResultType = true; break;
-    case OpConvertFToS: *hasResult = true; *hasResultType = true; break;
-    case OpConvertSToF: *hasResult = true; *hasResultType = true; break;
-    case OpConvertUToF: *hasResult = true; *hasResultType = true; break;
-    case OpUConvert: *hasResult = true; *hasResultType = true; break;
-    case OpSConvert: *hasResult = true; *hasResultType = true; break;
-    case OpFConvert: *hasResult = true; *hasResultType = true; break;
-    case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
-    case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
-    case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
-    case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
-    case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
-    case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
-    case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
-    case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
-    case OpBitcast: *hasResult = true; *hasResultType = true; break;
-    case OpSNegate: *hasResult = true; *hasResultType = true; break;
-    case OpFNegate: *hasResult = true; *hasResultType = true; break;
-    case OpIAdd: *hasResult = true; *hasResultType = true; break;
-    case OpFAdd: *hasResult = true; *hasResultType = true; break;
-    case OpISub: *hasResult = true; *hasResultType = true; break;
-    case OpFSub: *hasResult = true; *hasResultType = true; break;
-    case OpIMul: *hasResult = true; *hasResultType = true; break;
-    case OpFMul: *hasResult = true; *hasResultType = true; break;
-    case OpUDiv: *hasResult = true; *hasResultType = true; break;
-    case OpSDiv: *hasResult = true; *hasResultType = true; break;
-    case OpFDiv: *hasResult = true; *hasResultType = true; break;
-    case OpUMod: *hasResult = true; *hasResultType = true; break;
-    case OpSRem: *hasResult = true; *hasResultType = true; break;
-    case OpSMod: *hasResult = true; *hasResultType = true; break;
-    case OpFRem: *hasResult = true; *hasResultType = true; break;
-    case OpFMod: *hasResult = true; *hasResultType = true; break;
-    case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
-    case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
-    case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
-    case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
-    case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
-    case OpOuterProduct: *hasResult = true; *hasResultType = true; break;
-    case OpDot: *hasResult = true; *hasResultType = true; break;
-    case OpIAddCarry: *hasResult = true; *hasResultType = true; break;
-    case OpISubBorrow: *hasResult = true; *hasResultType = true; break;
-    case OpUMulExtended: *hasResult = true; *hasResultType = true; break;
-    case OpSMulExtended: *hasResult = true; *hasResultType = true; break;
-    case OpAny: *hasResult = true; *hasResultType = true; break;
-    case OpAll: *hasResult = true; *hasResultType = true; break;
-    case OpIsNan: *hasResult = true; *hasResultType = true; break;
-    case OpIsInf: *hasResult = true; *hasResultType = true; break;
-    case OpIsFinite: *hasResult = true; *hasResultType = true; break;
-    case OpIsNormal: *hasResult = true; *hasResultType = true; break;
-    case OpSignBitSet: *hasResult = true; *hasResultType = true; break;
-    case OpLessOrGreater: *hasResult = true; *hasResultType = true; break;
-    case OpOrdered: *hasResult = true; *hasResultType = true; break;
-    case OpUnordered: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalEqual: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalOr: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalAnd: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalNot: *hasResult = true; *hasResultType = true; break;
-    case OpSelect: *hasResult = true; *hasResultType = true; break;
-    case OpIEqual: *hasResult = true; *hasResultType = true; break;
-    case OpINotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpUGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case OpSGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpULessThan: *hasResult = true; *hasResultType = true; break;
-    case OpSLessThan: *hasResult = true; *hasResultType = true; break;
-    case OpULessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
-    case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
-    case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
-    case OpBitwiseOr: *hasResult = true; *hasResultType = true; break;
-    case OpBitwiseXor: *hasResult = true; *hasResultType = true; break;
-    case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
-    case OpNot: *hasResult = true; *hasResultType = true; break;
-    case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
-    case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
-    case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
-    case OpBitReverse: *hasResult = true; *hasResultType = true; break;
-    case OpBitCount: *hasResult = true; *hasResultType = true; break;
-    case OpDPdx: *hasResult = true; *hasResultType = true; break;
-    case OpDPdy: *hasResult = true; *hasResultType = true; break;
-    case OpFwidth: *hasResult = true; *hasResultType = true; break;
-    case OpDPdxFine: *hasResult = true; *hasResultType = true; break;
-    case OpDPdyFine: *hasResult = true; *hasResultType = true; break;
-    case OpFwidthFine: *hasResult = true; *hasResultType = true; break;
-    case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
-    case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
-    case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
-    case OpEmitVertex: *hasResult = false; *hasResultType = false; break;
-    case OpEndPrimitive: *hasResult = false; *hasResultType = false; break;
-    case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
-    case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
-    case OpControlBarrier: *hasResult = false; *hasResultType = false; break;
-    case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
-    case OpAtomicLoad: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicStore: *hasResult = false; *hasResultType = false; break;
-    case OpAtomicExchange: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicISub: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicSMin: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicUMin: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicSMax: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicUMax: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicAnd: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicOr: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicXor: *hasResult = true; *hasResultType = true; break;
-    case OpPhi: *hasResult = true; *hasResultType = true; break;
-    case OpLoopMerge: *hasResult = false; *hasResultType = false; break;
-    case OpSelectionMerge: *hasResult = false; *hasResultType = false; break;
-    case OpLabel: *hasResult = true; *hasResultType = false; break;
-    case OpBranch: *hasResult = false; *hasResultType = false; break;
-    case OpBranchConditional: *hasResult = false; *hasResultType = false; break;
-    case OpSwitch: *hasResult = false; *hasResultType = false; break;
-    case OpKill: *hasResult = false; *hasResultType = false; break;
-    case OpReturn: *hasResult = false; *hasResultType = false; break;
-    case OpReturnValue: *hasResult = false; *hasResultType = false; break;
-    case OpUnreachable: *hasResult = false; *hasResultType = false; break;
-    case OpLifetimeStart: *hasResult = false; *hasResultType = false; break;
-    case OpLifetimeStop: *hasResult = false; *hasResultType = false; break;
-    case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
-    case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
-    case OpGroupAll: *hasResult = true; *hasResultType = true; break;
-    case OpGroupAny: *hasResult = true; *hasResultType = true; break;
-    case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
-    case OpGroupIAdd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFAdd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupUMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupSMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupUMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupSMax: *hasResult = true; *hasResultType = true; break;
-    case OpReadPipe: *hasResult = true; *hasResultType = true; break;
-    case OpWritePipe: *hasResult = true; *hasResultType = true; break;
-    case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
-    case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
-    case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
-    case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
-    case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
-    case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
-    case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
-    case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
-    case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
-    case OpRetainEvent: *hasResult = false; *hasResultType = false; break;
-    case OpReleaseEvent: *hasResult = false; *hasResultType = false; break;
-    case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
-    case OpIsValidEvent: *hasResult = true; *hasResultType = true; break;
-    case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
-    case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
-    case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
-    case OpBuildNDRange: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseGather: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
-    case OpNoLine: *hasResult = false; *hasResultType = false; break;
-    case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
-    case OpImageSparseRead: *hasResult = true; *hasResultType = true; break;
-    case OpSizeOf: *hasResult = true; *hasResultType = true; break;
-    case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
-    case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
-    case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
-    case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
-    case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
-    case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
-    case OpModuleProcessed: *hasResult = false; *hasResultType = false; break;
-    case OpExecutionModeId: *hasResult = false; *hasResultType = false; break;
-    case OpDecorateId: *hasResult = false; *hasResultType = false; break;
-    case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
-    case OpCopyLogical: *hasResult = true; *hasResultType = true; break;
-    case OpPtrEqual: *hasResult = true; *hasResultType = true; break;
-    case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpPtrDiff: *hasResult = true; *hasResultType = true; break;
-    case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
-    case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupReadInvocationKHR: *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;
-    case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
-    case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
-    case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
-    case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionTypeKHR: *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;
-    case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
-    case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
-    case OpReadClockKHR: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
-    case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
-    case OpReportIntersectionNV: *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 OpTypeAccelerationStructureNV: *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;
-    case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
-    case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
-    case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
-    case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
-    case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
-    case OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break;
-    case OpIsHelperInvocationEXT: *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;
-    case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAsmINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break;
-    case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break;
-    case OpExpectKHR: *hasResult = true; *hasResultType = true; break;
-    case OpDecorateString: *hasResult = false; *hasResultType = false; break;
-    case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
-    case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;
-    case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
-    }
-}
-#endif /* SPV_ENABLE_UTILITY_CODE */
-
-// Overload operator| for mask bit combining
-
-inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
-inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
-inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
-inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
-inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
-inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
-inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
-inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
-inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); }
-inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); }
-
-}  // end namespace spv
-
-#endif  // #ifndef spirv_HPP
-
+// Copyright (c) 2014-2020 The Khronos Group Inc.

+//

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

+// of this software and/or associated documentation files (the "Materials"),

+// to deal in the Materials without restriction, including without limitation

+// the rights to use, copy, modify, merge, publish, distribute, sublicense,

+// and/or sell copies of the Materials, and to permit persons to whom the

+// Materials are furnished to do so, subject to the following conditions:

+//

+// The above copyright notice and this permission notice shall be included in

+// all copies or substantial portions of the Materials.

+//

+// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS

+// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND

+// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/

+//

+// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS

+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL

+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

+// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS

+// IN THE MATERIALS.

+

+// This header is automatically generated by the same tool that creates

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

+

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

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

+//

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

+// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL

+// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']

+// - C# will use enum classes in the Specification class located in the "Spv" namespace,

+//     e.g.: Spv.Specification.SourceLanguage.GLSL

+// - D will have tokens under the "spv" module, e.g: spv.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

+// amount (1 << x) for each corresponding enumerant.

+

+#ifndef spirv_HPP

+#define spirv_HPP

+

+namespace spv {

+

+typedef unsigned int Id;

+

+#define SPV_VERSION 0x10600

+#define SPV_REVISION 1

+

+static const unsigned int MagicNumber = 0x07230203;

+static const unsigned int Version = 0x00010600;

+static const unsigned int Revision = 1;

+static const unsigned int OpCodeMask = 0xffff;

+static const unsigned int WordCountShift = 16;

+

+enum SourceLanguage {

+    SourceLanguageUnknown = 0,

+    SourceLanguageESSL = 1,

+    SourceLanguageGLSL = 2,

+    SourceLanguageOpenCL_C = 3,

+    SourceLanguageOpenCL_CPP = 4,

+    SourceLanguageHLSL = 5,

+    SourceLanguageCPP_for_OpenCL = 6,

+    SourceLanguageMax = 0x7fffffff,

+};

+

+enum ExecutionModel {

+    ExecutionModelVertex = 0,

+    ExecutionModelTessellationControl = 1,

+    ExecutionModelTessellationEvaluation = 2,

+    ExecutionModelGeometry = 3,

+    ExecutionModelFragment = 4,

+    ExecutionModelGLCompute = 5,

+    ExecutionModelKernel = 6,

+    ExecutionModelTaskNV = 5267,

+    ExecutionModelMeshNV = 5268,

+    ExecutionModelRayGenerationKHR = 5313,

+    ExecutionModelRayGenerationNV = 5313,

+    ExecutionModelIntersectionKHR = 5314,

+    ExecutionModelIntersectionNV = 5314,

+    ExecutionModelAnyHitKHR = 5315,

+    ExecutionModelAnyHitNV = 5315,

+    ExecutionModelClosestHitKHR = 5316,

+    ExecutionModelClosestHitNV = 5316,

+    ExecutionModelMissKHR = 5317,

+    ExecutionModelMissNV = 5317,

+    ExecutionModelCallableKHR = 5318,

+    ExecutionModelCallableNV = 5318,

+    ExecutionModelTaskEXT = 5364,

+    ExecutionModelMeshEXT = 5365,

+    ExecutionModelMax = 0x7fffffff,

+};

+

+enum AddressingModel {

+    AddressingModelLogical = 0,

+    AddressingModelPhysical32 = 1,

+    AddressingModelPhysical64 = 2,

+    AddressingModelPhysicalStorageBuffer64 = 5348,

+    AddressingModelPhysicalStorageBuffer64EXT = 5348,

+    AddressingModelMax = 0x7fffffff,

+};

+

+enum MemoryModel {

+    MemoryModelSimple = 0,

+    MemoryModelGLSL450 = 1,

+    MemoryModelOpenCL = 2,

+    MemoryModelVulkan = 3,

+    MemoryModelVulkanKHR = 3,

+    MemoryModelMax = 0x7fffffff,

+};

+

+enum ExecutionMode {

+    ExecutionModeInvocations = 0,

+    ExecutionModeSpacingEqual = 1,

+    ExecutionModeSpacingFractionalEven = 2,

+    ExecutionModeSpacingFractionalOdd = 3,

+    ExecutionModeVertexOrderCw = 4,

+    ExecutionModeVertexOrderCcw = 5,

+    ExecutionModePixelCenterInteger = 6,

+    ExecutionModeOriginUpperLeft = 7,

+    ExecutionModeOriginLowerLeft = 8,

+    ExecutionModeEarlyFragmentTests = 9,

+    ExecutionModePointMode = 10,

+    ExecutionModeXfb = 11,

+    ExecutionModeDepthReplacing = 12,

+    ExecutionModeDepthGreater = 14,

+    ExecutionModeDepthLess = 15,

+    ExecutionModeDepthUnchanged = 16,

+    ExecutionModeLocalSize = 17,

+    ExecutionModeLocalSizeHint = 18,

+    ExecutionModeInputPoints = 19,

+    ExecutionModeInputLines = 20,

+    ExecutionModeInputLinesAdjacency = 21,

+    ExecutionModeTriangles = 22,

+    ExecutionModeInputTrianglesAdjacency = 23,

+    ExecutionModeQuads = 24,

+    ExecutionModeIsolines = 25,

+    ExecutionModeOutputVertices = 26,

+    ExecutionModeOutputPoints = 27,

+    ExecutionModeOutputLineStrip = 28,

+    ExecutionModeOutputTriangleStrip = 29,

+    ExecutionModeVecTypeHint = 30,

+    ExecutionModeContractionOff = 31,

+    ExecutionModeInitializer = 33,

+    ExecutionModeFinalizer = 34,

+    ExecutionModeSubgroupSize = 35,

+    ExecutionModeSubgroupsPerWorkgroup = 36,

+    ExecutionModeSubgroupsPerWorkgroupId = 37,

+    ExecutionModeLocalSizeId = 38,

+    ExecutionModeLocalSizeHintId = 39,

+    ExecutionModeSubgroupUniformControlFlowKHR = 4421,

+    ExecutionModePostDepthCoverage = 4446,

+    ExecutionModeDenormPreserve = 4459,

+    ExecutionModeDenormFlushToZero = 4460,

+    ExecutionModeSignedZeroInfNanPreserve = 4461,

+    ExecutionModeRoundingModeRTE = 4462,

+    ExecutionModeRoundingModeRTZ = 4463,

+    ExecutionModeEarlyAndLateFragmentTestsAMD = 5017,

+    ExecutionModeStencilRefReplacingEXT = 5027,

+    ExecutionModeStencilRefUnchangedFrontAMD = 5079,

+    ExecutionModeStencilRefGreaterFrontAMD = 5080,

+    ExecutionModeStencilRefLessFrontAMD = 5081,

+    ExecutionModeStencilRefUnchangedBackAMD = 5082,

+    ExecutionModeStencilRefGreaterBackAMD = 5083,

+    ExecutionModeStencilRefLessBackAMD = 5084,

+    ExecutionModeOutputLinesEXT = 5269,

+    ExecutionModeOutputLinesNV = 5269,

+    ExecutionModeOutputPrimitivesEXT = 5270,

+    ExecutionModeOutputPrimitivesNV = 5270,

+    ExecutionModeDerivativeGroupQuadsNV = 5289,

+    ExecutionModeDerivativeGroupLinearNV = 5290,

+    ExecutionModeOutputTrianglesEXT = 5298,

+    ExecutionModeOutputTrianglesNV = 5298,

+    ExecutionModePixelInterlockOrderedEXT = 5366,

+    ExecutionModePixelInterlockUnorderedEXT = 5367,

+    ExecutionModeSampleInterlockOrderedEXT = 5368,

+    ExecutionModeSampleInterlockUnorderedEXT = 5369,

+    ExecutionModeShadingRateInterlockOrderedEXT = 5370,

+    ExecutionModeShadingRateInterlockUnorderedEXT = 5371,

+    ExecutionModeSharedLocalMemorySizeINTEL = 5618,

+    ExecutionModeRoundingModeRTPINTEL = 5620,

+    ExecutionModeRoundingModeRTNINTEL = 5621,

+    ExecutionModeFloatingPointModeALTINTEL = 5622,

+    ExecutionModeFloatingPointModeIEEEINTEL = 5623,

+    ExecutionModeMaxWorkgroupSizeINTEL = 5893,

+    ExecutionModeMaxWorkDimINTEL = 5894,

+    ExecutionModeNoGlobalOffsetINTEL = 5895,

+    ExecutionModeNumSIMDWorkitemsINTEL = 5896,

+    ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,

+    ExecutionModeMax = 0x7fffffff,

+};

+

+enum StorageClass {

+    StorageClassUniformConstant = 0,

+    StorageClassInput = 1,

+    StorageClassUniform = 2,

+    StorageClassOutput = 3,

+    StorageClassWorkgroup = 4,

+    StorageClassCrossWorkgroup = 5,

+    StorageClassPrivate = 6,

+    StorageClassFunction = 7,

+    StorageClassGeneric = 8,

+    StorageClassPushConstant = 9,

+    StorageClassAtomicCounter = 10,

+    StorageClassImage = 11,

+    StorageClassStorageBuffer = 12,

+    StorageClassCallableDataKHR = 5328,

+    StorageClassCallableDataNV = 5328,

+    StorageClassIncomingCallableDataKHR = 5329,

+    StorageClassIncomingCallableDataNV = 5329,

+    StorageClassRayPayloadKHR = 5338,

+    StorageClassRayPayloadNV = 5338,

+    StorageClassHitAttributeKHR = 5339,

+    StorageClassHitAttributeNV = 5339,

+    StorageClassIncomingRayPayloadKHR = 5342,

+    StorageClassIncomingRayPayloadNV = 5342,

+    StorageClassShaderRecordBufferKHR = 5343,

+    StorageClassShaderRecordBufferNV = 5343,

+    StorageClassPhysicalStorageBuffer = 5349,

+    StorageClassPhysicalStorageBufferEXT = 5349,

+    StorageClassTaskPayloadWorkgroupEXT = 5402,

+    StorageClassCodeSectionINTEL = 5605,

+    StorageClassDeviceOnlyINTEL = 5936,

+    StorageClassHostOnlyINTEL = 5937,

+    StorageClassMax = 0x7fffffff,

+};

+

+enum Dim {

+    Dim1D = 0,

+    Dim2D = 1,

+    Dim3D = 2,

+    DimCube = 3,

+    DimRect = 4,

+    DimBuffer = 5,

+    DimSubpassData = 6,

+    DimMax = 0x7fffffff,

+};

+

+enum SamplerAddressingMode {

+    SamplerAddressingModeNone = 0,

+    SamplerAddressingModeClampToEdge = 1,

+    SamplerAddressingModeClamp = 2,

+    SamplerAddressingModeRepeat = 3,

+    SamplerAddressingModeRepeatMirrored = 4,

+    SamplerAddressingModeMax = 0x7fffffff,

+};

+

+enum SamplerFilterMode {

+    SamplerFilterModeNearest = 0,

+    SamplerFilterModeLinear = 1,

+    SamplerFilterModeMax = 0x7fffffff,

+};

+

+enum ImageFormat {

+    ImageFormatUnknown = 0,

+    ImageFormatRgba32f = 1,

+    ImageFormatRgba16f = 2,

+    ImageFormatR32f = 3,

+    ImageFormatRgba8 = 4,

+    ImageFormatRgba8Snorm = 5,

+    ImageFormatRg32f = 6,

+    ImageFormatRg16f = 7,

+    ImageFormatR11fG11fB10f = 8,

+    ImageFormatR16f = 9,

+    ImageFormatRgba16 = 10,

+    ImageFormatRgb10A2 = 11,

+    ImageFormatRg16 = 12,

+    ImageFormatRg8 = 13,

+    ImageFormatR16 = 14,

+    ImageFormatR8 = 15,

+    ImageFormatRgba16Snorm = 16,

+    ImageFormatRg16Snorm = 17,

+    ImageFormatRg8Snorm = 18,

+    ImageFormatR16Snorm = 19,

+    ImageFormatR8Snorm = 20,

+    ImageFormatRgba32i = 21,

+    ImageFormatRgba16i = 22,

+    ImageFormatRgba8i = 23,

+    ImageFormatR32i = 24,

+    ImageFormatRg32i = 25,

+    ImageFormatRg16i = 26,

+    ImageFormatRg8i = 27,

+    ImageFormatR16i = 28,

+    ImageFormatR8i = 29,

+    ImageFormatRgba32ui = 30,

+    ImageFormatRgba16ui = 31,

+    ImageFormatRgba8ui = 32,

+    ImageFormatR32ui = 33,

+    ImageFormatRgb10a2ui = 34,

+    ImageFormatRg32ui = 35,

+    ImageFormatRg16ui = 36,

+    ImageFormatRg8ui = 37,

+    ImageFormatR16ui = 38,

+    ImageFormatR8ui = 39,

+    ImageFormatR64ui = 40,

+    ImageFormatR64i = 41,

+    ImageFormatMax = 0x7fffffff,

+};

+

+enum ImageChannelOrder {

+    ImageChannelOrderR = 0,

+    ImageChannelOrderA = 1,

+    ImageChannelOrderRG = 2,

+    ImageChannelOrderRA = 3,

+    ImageChannelOrderRGB = 4,

+    ImageChannelOrderRGBA = 5,

+    ImageChannelOrderBGRA = 6,

+    ImageChannelOrderARGB = 7,

+    ImageChannelOrderIntensity = 8,

+    ImageChannelOrderLuminance = 9,

+    ImageChannelOrderRx = 10,

+    ImageChannelOrderRGx = 11,

+    ImageChannelOrderRGBx = 12,

+    ImageChannelOrderDepth = 13,

+    ImageChannelOrderDepthStencil = 14,

+    ImageChannelOrdersRGB = 15,

+    ImageChannelOrdersRGBx = 16,

+    ImageChannelOrdersRGBA = 17,

+    ImageChannelOrdersBGRA = 18,

+    ImageChannelOrderABGR = 19,

+    ImageChannelOrderMax = 0x7fffffff,

+};

+

+enum ImageChannelDataType {

+    ImageChannelDataTypeSnormInt8 = 0,

+    ImageChannelDataTypeSnormInt16 = 1,

+    ImageChannelDataTypeUnormInt8 = 2,

+    ImageChannelDataTypeUnormInt16 = 3,

+    ImageChannelDataTypeUnormShort565 = 4,

+    ImageChannelDataTypeUnormShort555 = 5,

+    ImageChannelDataTypeUnormInt101010 = 6,

+    ImageChannelDataTypeSignedInt8 = 7,

+    ImageChannelDataTypeSignedInt16 = 8,

+    ImageChannelDataTypeSignedInt32 = 9,

+    ImageChannelDataTypeUnsignedInt8 = 10,

+    ImageChannelDataTypeUnsignedInt16 = 11,

+    ImageChannelDataTypeUnsignedInt32 = 12,

+    ImageChannelDataTypeHalfFloat = 13,

+    ImageChannelDataTypeFloat = 14,

+    ImageChannelDataTypeUnormInt24 = 15,

+    ImageChannelDataTypeUnormInt101010_2 = 16,

+    ImageChannelDataTypeMax = 0x7fffffff,

+};

+

+enum ImageOperandsShift {

+    ImageOperandsBiasShift = 0,

+    ImageOperandsLodShift = 1,

+    ImageOperandsGradShift = 2,

+    ImageOperandsConstOffsetShift = 3,

+    ImageOperandsOffsetShift = 4,

+    ImageOperandsConstOffsetsShift = 5,

+    ImageOperandsSampleShift = 6,

+    ImageOperandsMinLodShift = 7,

+    ImageOperandsMakeTexelAvailableShift = 8,

+    ImageOperandsMakeTexelAvailableKHRShift = 8,

+    ImageOperandsMakeTexelVisibleShift = 9,

+    ImageOperandsMakeTexelVisibleKHRShift = 9,

+    ImageOperandsNonPrivateTexelShift = 10,

+    ImageOperandsNonPrivateTexelKHRShift = 10,

+    ImageOperandsVolatileTexelShift = 11,

+    ImageOperandsVolatileTexelKHRShift = 11,

+    ImageOperandsSignExtendShift = 12,

+    ImageOperandsZeroExtendShift = 13,

+    ImageOperandsNontemporalShift = 14,

+    ImageOperandsOffsetsShift = 16,

+    ImageOperandsMax = 0x7fffffff,

+};

+

+enum ImageOperandsMask {

+    ImageOperandsMaskNone = 0,

+    ImageOperandsBiasMask = 0x00000001,

+    ImageOperandsLodMask = 0x00000002,

+    ImageOperandsGradMask = 0x00000004,

+    ImageOperandsConstOffsetMask = 0x00000008,

+    ImageOperandsOffsetMask = 0x00000010,

+    ImageOperandsConstOffsetsMask = 0x00000020,

+    ImageOperandsSampleMask = 0x00000040,

+    ImageOperandsMinLodMask = 0x00000080,

+    ImageOperandsMakeTexelAvailableMask = 0x00000100,

+    ImageOperandsMakeTexelAvailableKHRMask = 0x00000100,

+    ImageOperandsMakeTexelVisibleMask = 0x00000200,

+    ImageOperandsMakeTexelVisibleKHRMask = 0x00000200,

+    ImageOperandsNonPrivateTexelMask = 0x00000400,

+    ImageOperandsNonPrivateTexelKHRMask = 0x00000400,

+    ImageOperandsVolatileTexelMask = 0x00000800,

+    ImageOperandsVolatileTexelKHRMask = 0x00000800,

+    ImageOperandsSignExtendMask = 0x00001000,

+    ImageOperandsZeroExtendMask = 0x00002000,

+    ImageOperandsNontemporalMask = 0x00004000,

+    ImageOperandsOffsetsMask = 0x00010000,

+};

+

+enum FPFastMathModeShift {

+    FPFastMathModeNotNaNShift = 0,

+    FPFastMathModeNotInfShift = 1,

+    FPFastMathModeNSZShift = 2,

+    FPFastMathModeAllowRecipShift = 3,

+    FPFastMathModeFastShift = 4,

+    FPFastMathModeAllowContractFastINTELShift = 16,

+    FPFastMathModeAllowReassocINTELShift = 17,

+    FPFastMathModeMax = 0x7fffffff,

+};

+

+enum FPFastMathModeMask {

+    FPFastMathModeMaskNone = 0,

+    FPFastMathModeNotNaNMask = 0x00000001,

+    FPFastMathModeNotInfMask = 0x00000002,

+    FPFastMathModeNSZMask = 0x00000004,

+    FPFastMathModeAllowRecipMask = 0x00000008,

+    FPFastMathModeFastMask = 0x00000010,

+    FPFastMathModeAllowContractFastINTELMask = 0x00010000,

+    FPFastMathModeAllowReassocINTELMask = 0x00020000,

+};

+

+enum FPRoundingMode {

+    FPRoundingModeRTE = 0,

+    FPRoundingModeRTZ = 1,

+    FPRoundingModeRTP = 2,

+    FPRoundingModeRTN = 3,

+    FPRoundingModeMax = 0x7fffffff,

+};

+

+enum LinkageType {

+    LinkageTypeExport = 0,

+    LinkageTypeImport = 1,

+    LinkageTypeLinkOnceODR = 2,

+    LinkageTypeMax = 0x7fffffff,

+};

+

+enum AccessQualifier {

+    AccessQualifierReadOnly = 0,

+    AccessQualifierWriteOnly = 1,

+    AccessQualifierReadWrite = 2,

+    AccessQualifierMax = 0x7fffffff,

+};

+

+enum FunctionParameterAttribute {

+    FunctionParameterAttributeZext = 0,

+    FunctionParameterAttributeSext = 1,

+    FunctionParameterAttributeByVal = 2,

+    FunctionParameterAttributeSret = 3,

+    FunctionParameterAttributeNoAlias = 4,

+    FunctionParameterAttributeNoCapture = 5,

+    FunctionParameterAttributeNoWrite = 6,

+    FunctionParameterAttributeNoReadWrite = 7,

+    FunctionParameterAttributeMax = 0x7fffffff,

+};

+

+enum Decoration {

+    DecorationRelaxedPrecision = 0,

+    DecorationSpecId = 1,

+    DecorationBlock = 2,

+    DecorationBufferBlock = 3,

+    DecorationRowMajor = 4,

+    DecorationColMajor = 5,

+    DecorationArrayStride = 6,

+    DecorationMatrixStride = 7,

+    DecorationGLSLShared = 8,

+    DecorationGLSLPacked = 9,

+    DecorationCPacked = 10,

+    DecorationBuiltIn = 11,

+    DecorationNoPerspective = 13,

+    DecorationFlat = 14,

+    DecorationPatch = 15,

+    DecorationCentroid = 16,

+    DecorationSample = 17,

+    DecorationInvariant = 18,

+    DecorationRestrict = 19,

+    DecorationAliased = 20,

+    DecorationVolatile = 21,

+    DecorationConstant = 22,

+    DecorationCoherent = 23,

+    DecorationNonWritable = 24,

+    DecorationNonReadable = 25,

+    DecorationUniform = 26,

+    DecorationUniformId = 27,

+    DecorationSaturatedConversion = 28,

+    DecorationStream = 29,

+    DecorationLocation = 30,

+    DecorationComponent = 31,

+    DecorationIndex = 32,

+    DecorationBinding = 33,

+    DecorationDescriptorSet = 34,

+    DecorationOffset = 35,

+    DecorationXfbBuffer = 36,

+    DecorationXfbStride = 37,

+    DecorationFuncParamAttr = 38,

+    DecorationFPRoundingMode = 39,

+    DecorationFPFastMathMode = 40,

+    DecorationLinkageAttributes = 41,

+    DecorationNoContraction = 42,

+    DecorationInputAttachmentIndex = 43,

+    DecorationAlignment = 44,

+    DecorationMaxByteOffset = 45,

+    DecorationAlignmentId = 46,

+    DecorationMaxByteOffsetId = 47,

+    DecorationNoSignedWrap = 4469,

+    DecorationNoUnsignedWrap = 4470,

+    DecorationExplicitInterpAMD = 4999,

+    DecorationOverrideCoverageNV = 5248,

+    DecorationPassthroughNV = 5250,

+    DecorationViewportRelativeNV = 5252,

+    DecorationSecondaryViewportRelativeNV = 5256,

+    DecorationPerPrimitiveEXT = 5271,

+    DecorationPerPrimitiveNV = 5271,

+    DecorationPerViewNV = 5272,

+    DecorationPerTaskNV = 5273,

+    DecorationPerVertexKHR = 5285,

+    DecorationPerVertexNV = 5285,

+    DecorationNonUniform = 5300,

+    DecorationNonUniformEXT = 5300,

+    DecorationRestrictPointer = 5355,

+    DecorationRestrictPointerEXT = 5355,

+    DecorationAliasedPointer = 5356,

+    DecorationAliasedPointerEXT = 5356,

+    DecorationBindlessSamplerNV = 5398,

+    DecorationBindlessImageNV = 5399,

+    DecorationBoundSamplerNV = 5400,

+    DecorationBoundImageNV = 5401,

+    DecorationSIMTCallINTEL = 5599,

+    DecorationReferencedIndirectlyINTEL = 5602,

+    DecorationClobberINTEL = 5607,

+    DecorationSideEffectsINTEL = 5608,

+    DecorationVectorComputeVariableINTEL = 5624,

+    DecorationFuncParamIOKindINTEL = 5625,

+    DecorationVectorComputeFunctionINTEL = 5626,

+    DecorationStackCallINTEL = 5627,

+    DecorationGlobalVariableOffsetINTEL = 5628,

+    DecorationCounterBuffer = 5634,

+    DecorationHlslCounterBufferGOOGLE = 5634,

+    DecorationHlslSemanticGOOGLE = 5635,

+    DecorationUserSemantic = 5635,

+    DecorationUserTypeGOOGLE = 5636,

+    DecorationFunctionRoundingModeINTEL = 5822,

+    DecorationFunctionDenormModeINTEL = 5823,

+    DecorationRegisterINTEL = 5825,

+    DecorationMemoryINTEL = 5826,

+    DecorationNumbanksINTEL = 5827,

+    DecorationBankwidthINTEL = 5828,

+    DecorationMaxPrivateCopiesINTEL = 5829,

+    DecorationSinglepumpINTEL = 5830,

+    DecorationDoublepumpINTEL = 5831,

+    DecorationMaxReplicatesINTEL = 5832,

+    DecorationSimpleDualPortINTEL = 5833,

+    DecorationMergeINTEL = 5834,

+    DecorationBankBitsINTEL = 5835,

+    DecorationForcePow2DepthINTEL = 5836,

+    DecorationBurstCoalesceINTEL = 5899,

+    DecorationCacheSizeINTEL = 5900,

+    DecorationDontStaticallyCoalesceINTEL = 5901,

+    DecorationPrefetchINTEL = 5902,

+    DecorationStallEnableINTEL = 5905,

+    DecorationFuseLoopsInFunctionINTEL = 5907,

+    DecorationBufferLocationINTEL = 5921,

+    DecorationIOPipeStorageINTEL = 5944,

+    DecorationFunctionFloatingPointModeINTEL = 6080,

+    DecorationSingleElementVectorINTEL = 6085,

+    DecorationVectorComputeCallableFunctionINTEL = 6087,

+    DecorationMediaBlockIOINTEL = 6140,

+    DecorationMax = 0x7fffffff,

+};

+

+enum BuiltIn {

+    BuiltInPosition = 0,

+    BuiltInPointSize = 1,

+    BuiltInClipDistance = 3,

+    BuiltInCullDistance = 4,

+    BuiltInVertexId = 5,

+    BuiltInInstanceId = 6,

+    BuiltInPrimitiveId = 7,

+    BuiltInInvocationId = 8,

+    BuiltInLayer = 9,

+    BuiltInViewportIndex = 10,

+    BuiltInTessLevelOuter = 11,

+    BuiltInTessLevelInner = 12,

+    BuiltInTessCoord = 13,

+    BuiltInPatchVertices = 14,

+    BuiltInFragCoord = 15,

+    BuiltInPointCoord = 16,

+    BuiltInFrontFacing = 17,

+    BuiltInSampleId = 18,

+    BuiltInSamplePosition = 19,

+    BuiltInSampleMask = 20,

+    BuiltInFragDepth = 22,

+    BuiltInHelperInvocation = 23,

+    BuiltInNumWorkgroups = 24,

+    BuiltInWorkgroupSize = 25,

+    BuiltInWorkgroupId = 26,

+    BuiltInLocalInvocationId = 27,

+    BuiltInGlobalInvocationId = 28,

+    BuiltInLocalInvocationIndex = 29,

+    BuiltInWorkDim = 30,

+    BuiltInGlobalSize = 31,

+    BuiltInEnqueuedWorkgroupSize = 32,

+    BuiltInGlobalOffset = 33,

+    BuiltInGlobalLinearId = 34,

+    BuiltInSubgroupSize = 36,

+    BuiltInSubgroupMaxSize = 37,

+    BuiltInNumSubgroups = 38,

+    BuiltInNumEnqueuedSubgroups = 39,

+    BuiltInSubgroupId = 40,

+    BuiltInSubgroupLocalInvocationId = 41,

+    BuiltInVertexIndex = 42,

+    BuiltInInstanceIndex = 43,

+    BuiltInSubgroupEqMask = 4416,

+    BuiltInSubgroupEqMaskKHR = 4416,

+    BuiltInSubgroupGeMask = 4417,

+    BuiltInSubgroupGeMaskKHR = 4417,

+    BuiltInSubgroupGtMask = 4418,

+    BuiltInSubgroupGtMaskKHR = 4418,

+    BuiltInSubgroupLeMask = 4419,

+    BuiltInSubgroupLeMaskKHR = 4419,

+    BuiltInSubgroupLtMask = 4420,

+    BuiltInSubgroupLtMaskKHR = 4420,

+    BuiltInBaseVertex = 4424,

+    BuiltInBaseInstance = 4425,

+    BuiltInDrawIndex = 4426,

+    BuiltInPrimitiveShadingRateKHR = 4432,

+    BuiltInDeviceIndex = 4438,

+    BuiltInViewIndex = 4440,

+    BuiltInShadingRateKHR = 4444,

+    BuiltInBaryCoordNoPerspAMD = 4992,

+    BuiltInBaryCoordNoPerspCentroidAMD = 4993,

+    BuiltInBaryCoordNoPerspSampleAMD = 4994,

+    BuiltInBaryCoordSmoothAMD = 4995,

+    BuiltInBaryCoordSmoothCentroidAMD = 4996,

+    BuiltInBaryCoordSmoothSampleAMD = 4997,

+    BuiltInBaryCoordPullModelAMD = 4998,

+    BuiltInFragStencilRefEXT = 5014,

+    BuiltInViewportMaskNV = 5253,

+    BuiltInSecondaryPositionNV = 5257,

+    BuiltInSecondaryViewportMaskNV = 5258,

+    BuiltInPositionPerViewNV = 5261,

+    BuiltInViewportMaskPerViewNV = 5262,

+    BuiltInFullyCoveredEXT = 5264,

+    BuiltInTaskCountNV = 5274,

+    BuiltInPrimitiveCountNV = 5275,

+    BuiltInPrimitiveIndicesNV = 5276,

+    BuiltInClipDistancePerViewNV = 5277,

+    BuiltInCullDistancePerViewNV = 5278,

+    BuiltInLayerPerViewNV = 5279,

+    BuiltInMeshViewCountNV = 5280,

+    BuiltInMeshViewIndicesNV = 5281,

+    BuiltInBaryCoordKHR = 5286,

+    BuiltInBaryCoordNV = 5286,

+    BuiltInBaryCoordNoPerspKHR = 5287,

+    BuiltInBaryCoordNoPerspNV = 5287,

+    BuiltInFragSizeEXT = 5292,

+    BuiltInFragmentSizeNV = 5292,

+    BuiltInFragInvocationCountEXT = 5293,

+    BuiltInInvocationsPerPixelNV = 5293,

+    BuiltInPrimitivePointIndicesEXT = 5294,

+    BuiltInPrimitiveLineIndicesEXT = 5295,

+    BuiltInPrimitiveTriangleIndicesEXT = 5296,

+    BuiltInCullPrimitiveEXT = 5299,

+    BuiltInLaunchIdKHR = 5319,

+    BuiltInLaunchIdNV = 5319,

+    BuiltInLaunchSizeKHR = 5320,

+    BuiltInLaunchSizeNV = 5320,

+    BuiltInWorldRayOriginKHR = 5321,

+    BuiltInWorldRayOriginNV = 5321,

+    BuiltInWorldRayDirectionKHR = 5322,

+    BuiltInWorldRayDirectionNV = 5322,

+    BuiltInObjectRayOriginKHR = 5323,

+    BuiltInObjectRayOriginNV = 5323,

+    BuiltInObjectRayDirectionKHR = 5324,

+    BuiltInObjectRayDirectionNV = 5324,

+    BuiltInRayTminKHR = 5325,

+    BuiltInRayTminNV = 5325,

+    BuiltInRayTmaxKHR = 5326,

+    BuiltInRayTmaxNV = 5326,

+    BuiltInInstanceCustomIndexKHR = 5327,

+    BuiltInInstanceCustomIndexNV = 5327,

+    BuiltInObjectToWorldKHR = 5330,

+    BuiltInObjectToWorldNV = 5330,

+    BuiltInWorldToObjectKHR = 5331,

+    BuiltInWorldToObjectNV = 5331,

+    BuiltInHitTNV = 5332,

+    BuiltInHitKindKHR = 5333,

+    BuiltInHitKindNV = 5333,

+    BuiltInCurrentRayTimeNV = 5334,

+    BuiltInIncomingRayFlagsKHR = 5351,

+    BuiltInIncomingRayFlagsNV = 5351,

+    BuiltInRayGeometryIndexKHR = 5352,

+    BuiltInWarpsPerSMNV = 5374,

+    BuiltInSMCountNV = 5375,

+    BuiltInWarpIDNV = 5376,

+    BuiltInSMIDNV = 5377,

+    BuiltInCullMaskKHR = 6021,

+    BuiltInMax = 0x7fffffff,

+};

+

+enum SelectionControlShift {

+    SelectionControlFlattenShift = 0,

+    SelectionControlDontFlattenShift = 1,

+    SelectionControlMax = 0x7fffffff,

+};

+

+enum SelectionControlMask {

+    SelectionControlMaskNone = 0,

+    SelectionControlFlattenMask = 0x00000001,

+    SelectionControlDontFlattenMask = 0x00000002,

+};

+

+enum LoopControlShift {

+    LoopControlUnrollShift = 0,

+    LoopControlDontUnrollShift = 1,

+    LoopControlDependencyInfiniteShift = 2,

+    LoopControlDependencyLengthShift = 3,

+    LoopControlMinIterationsShift = 4,

+    LoopControlMaxIterationsShift = 5,

+    LoopControlIterationMultipleShift = 6,

+    LoopControlPeelCountShift = 7,

+    LoopControlPartialCountShift = 8,

+    LoopControlInitiationIntervalINTELShift = 16,

+    LoopControlMaxConcurrencyINTELShift = 17,

+    LoopControlDependencyArrayINTELShift = 18,

+    LoopControlPipelineEnableINTELShift = 19,

+    LoopControlLoopCoalesceINTELShift = 20,

+    LoopControlMaxInterleavingINTELShift = 21,

+    LoopControlSpeculatedIterationsINTELShift = 22,

+    LoopControlNoFusionINTELShift = 23,

+    LoopControlMax = 0x7fffffff,

+};

+

+enum LoopControlMask {

+    LoopControlMaskNone = 0,

+    LoopControlUnrollMask = 0x00000001,

+    LoopControlDontUnrollMask = 0x00000002,

+    LoopControlDependencyInfiniteMask = 0x00000004,

+    LoopControlDependencyLengthMask = 0x00000008,

+    LoopControlMinIterationsMask = 0x00000010,

+    LoopControlMaxIterationsMask = 0x00000020,

+    LoopControlIterationMultipleMask = 0x00000040,

+    LoopControlPeelCountMask = 0x00000080,

+    LoopControlPartialCountMask = 0x00000100,

+    LoopControlInitiationIntervalINTELMask = 0x00010000,

+    LoopControlMaxConcurrencyINTELMask = 0x00020000,

+    LoopControlDependencyArrayINTELMask = 0x00040000,

+    LoopControlPipelineEnableINTELMask = 0x00080000,

+    LoopControlLoopCoalesceINTELMask = 0x00100000,

+    LoopControlMaxInterleavingINTELMask = 0x00200000,

+    LoopControlSpeculatedIterationsINTELMask = 0x00400000,

+    LoopControlNoFusionINTELMask = 0x00800000,

+};

+

+enum FunctionControlShift {

+    FunctionControlInlineShift = 0,

+    FunctionControlDontInlineShift = 1,

+    FunctionControlPureShift = 2,

+    FunctionControlConstShift = 3,

+    FunctionControlOptNoneINTELShift = 16,

+    FunctionControlMax = 0x7fffffff,

+};

+

+enum FunctionControlMask {

+    FunctionControlMaskNone = 0,

+    FunctionControlInlineMask = 0x00000001,

+    FunctionControlDontInlineMask = 0x00000002,

+    FunctionControlPureMask = 0x00000004,

+    FunctionControlConstMask = 0x00000008,

+    FunctionControlOptNoneINTELMask = 0x00010000,

+};

+

+enum MemorySemanticsShift {

+    MemorySemanticsAcquireShift = 1,

+    MemorySemanticsReleaseShift = 2,

+    MemorySemanticsAcquireReleaseShift = 3,

+    MemorySemanticsSequentiallyConsistentShift = 4,

+    MemorySemanticsUniformMemoryShift = 6,

+    MemorySemanticsSubgroupMemoryShift = 7,

+    MemorySemanticsWorkgroupMemoryShift = 8,

+    MemorySemanticsCrossWorkgroupMemoryShift = 9,

+    MemorySemanticsAtomicCounterMemoryShift = 10,

+    MemorySemanticsImageMemoryShift = 11,

+    MemorySemanticsOutputMemoryShift = 12,

+    MemorySemanticsOutputMemoryKHRShift = 12,

+    MemorySemanticsMakeAvailableShift = 13,

+    MemorySemanticsMakeAvailableKHRShift = 13,

+    MemorySemanticsMakeVisibleShift = 14,

+    MemorySemanticsMakeVisibleKHRShift = 14,

+    MemorySemanticsVolatileShift = 15,

+    MemorySemanticsMax = 0x7fffffff,

+};

+

+enum MemorySemanticsMask {

+    MemorySemanticsMaskNone = 0,

+    MemorySemanticsAcquireMask = 0x00000002,

+    MemorySemanticsReleaseMask = 0x00000004,

+    MemorySemanticsAcquireReleaseMask = 0x00000008,

+    MemorySemanticsSequentiallyConsistentMask = 0x00000010,

+    MemorySemanticsUniformMemoryMask = 0x00000040,

+    MemorySemanticsSubgroupMemoryMask = 0x00000080,

+    MemorySemanticsWorkgroupMemoryMask = 0x00000100,

+    MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,

+    MemorySemanticsAtomicCounterMemoryMask = 0x00000400,

+    MemorySemanticsImageMemoryMask = 0x00000800,

+    MemorySemanticsOutputMemoryMask = 0x00001000,

+    MemorySemanticsOutputMemoryKHRMask = 0x00001000,

+    MemorySemanticsMakeAvailableMask = 0x00002000,

+    MemorySemanticsMakeAvailableKHRMask = 0x00002000,

+    MemorySemanticsMakeVisibleMask = 0x00004000,

+    MemorySemanticsMakeVisibleKHRMask = 0x00004000,

+    MemorySemanticsVolatileMask = 0x00008000,

+};

+

+enum MemoryAccessShift {

+    MemoryAccessVolatileShift = 0,

+    MemoryAccessAlignedShift = 1,

+    MemoryAccessNontemporalShift = 2,

+    MemoryAccessMakePointerAvailableShift = 3,

+    MemoryAccessMakePointerAvailableKHRShift = 3,

+    MemoryAccessMakePointerVisibleShift = 4,

+    MemoryAccessMakePointerVisibleKHRShift = 4,

+    MemoryAccessNonPrivatePointerShift = 5,

+    MemoryAccessNonPrivatePointerKHRShift = 5,

+    MemoryAccessMax = 0x7fffffff,

+};

+

+enum MemoryAccessMask {

+    MemoryAccessMaskNone = 0,

+    MemoryAccessVolatileMask = 0x00000001,

+    MemoryAccessAlignedMask = 0x00000002,

+    MemoryAccessNontemporalMask = 0x00000004,

+    MemoryAccessMakePointerAvailableMask = 0x00000008,

+    MemoryAccessMakePointerAvailableKHRMask = 0x00000008,

+    MemoryAccessMakePointerVisibleMask = 0x00000010,

+    MemoryAccessMakePointerVisibleKHRMask = 0x00000010,

+    MemoryAccessNonPrivatePointerMask = 0x00000020,

+    MemoryAccessNonPrivatePointerKHRMask = 0x00000020,

+};

+

+enum Scope {

+    ScopeCrossDevice = 0,

+    ScopeDevice = 1,

+    ScopeWorkgroup = 2,

+    ScopeSubgroup = 3,

+    ScopeInvocation = 4,

+    ScopeQueueFamily = 5,

+    ScopeQueueFamilyKHR = 5,

+    ScopeShaderCallKHR = 6,

+    ScopeMax = 0x7fffffff,

+};

+

+enum GroupOperation {

+    GroupOperationReduce = 0,

+    GroupOperationInclusiveScan = 1,

+    GroupOperationExclusiveScan = 2,

+    GroupOperationClusteredReduce = 3,

+    GroupOperationPartitionedReduceNV = 6,

+    GroupOperationPartitionedInclusiveScanNV = 7,

+    GroupOperationPartitionedExclusiveScanNV = 8,

+    GroupOperationMax = 0x7fffffff,

+};

+

+enum KernelEnqueueFlags {

+    KernelEnqueueFlagsNoWait = 0,

+    KernelEnqueueFlagsWaitKernel = 1,

+    KernelEnqueueFlagsWaitWorkGroup = 2,

+    KernelEnqueueFlagsMax = 0x7fffffff,

+};

+

+enum KernelProfilingInfoShift {

+    KernelProfilingInfoCmdExecTimeShift = 0,

+    KernelProfilingInfoMax = 0x7fffffff,

+};

+

+enum KernelProfilingInfoMask {

+    KernelProfilingInfoMaskNone = 0,

+    KernelProfilingInfoCmdExecTimeMask = 0x00000001,

+};

+

+enum Capability {

+    CapabilityMatrix = 0,

+    CapabilityShader = 1,

+    CapabilityGeometry = 2,

+    CapabilityTessellation = 3,

+    CapabilityAddresses = 4,

+    CapabilityLinkage = 5,

+    CapabilityKernel = 6,

+    CapabilityVector16 = 7,

+    CapabilityFloat16Buffer = 8,

+    CapabilityFloat16 = 9,

+    CapabilityFloat64 = 10,

+    CapabilityInt64 = 11,

+    CapabilityInt64Atomics = 12,

+    CapabilityImageBasic = 13,

+    CapabilityImageReadWrite = 14,

+    CapabilityImageMipmap = 15,

+    CapabilityPipes = 17,

+    CapabilityGroups = 18,

+    CapabilityDeviceEnqueue = 19,

+    CapabilityLiteralSampler = 20,

+    CapabilityAtomicStorage = 21,

+    CapabilityInt16 = 22,

+    CapabilityTessellationPointSize = 23,

+    CapabilityGeometryPointSize = 24,

+    CapabilityImageGatherExtended = 25,

+    CapabilityStorageImageMultisample = 27,

+    CapabilityUniformBufferArrayDynamicIndexing = 28,

+    CapabilitySampledImageArrayDynamicIndexing = 29,

+    CapabilityStorageBufferArrayDynamicIndexing = 30,

+    CapabilityStorageImageArrayDynamicIndexing = 31,

+    CapabilityClipDistance = 32,

+    CapabilityCullDistance = 33,

+    CapabilityImageCubeArray = 34,

+    CapabilitySampleRateShading = 35,

+    CapabilityImageRect = 36,

+    CapabilitySampledRect = 37,

+    CapabilityGenericPointer = 38,

+    CapabilityInt8 = 39,

+    CapabilityInputAttachment = 40,

+    CapabilitySparseResidency = 41,

+    CapabilityMinLod = 42,

+    CapabilitySampled1D = 43,

+    CapabilityImage1D = 44,

+    CapabilitySampledCubeArray = 45,

+    CapabilitySampledBuffer = 46,

+    CapabilityImageBuffer = 47,

+    CapabilityImageMSArray = 48,

+    CapabilityStorageImageExtendedFormats = 49,

+    CapabilityImageQuery = 50,

+    CapabilityDerivativeControl = 51,

+    CapabilityInterpolationFunction = 52,

+    CapabilityTransformFeedback = 53,

+    CapabilityGeometryStreams = 54,

+    CapabilityStorageImageReadWithoutFormat = 55,

+    CapabilityStorageImageWriteWithoutFormat = 56,

+    CapabilityMultiViewport = 57,

+    CapabilitySubgroupDispatch = 58,

+    CapabilityNamedBarrier = 59,

+    CapabilityPipeStorage = 60,

+    CapabilityGroupNonUniform = 61,

+    CapabilityGroupNonUniformVote = 62,

+    CapabilityGroupNonUniformArithmetic = 63,

+    CapabilityGroupNonUniformBallot = 64,

+    CapabilityGroupNonUniformShuffle = 65,

+    CapabilityGroupNonUniformShuffleRelative = 66,

+    CapabilityGroupNonUniformClustered = 67,

+    CapabilityGroupNonUniformQuad = 68,

+    CapabilityShaderLayer = 69,

+    CapabilityShaderViewportIndex = 70,

+    CapabilityUniformDecoration = 71,

+    CapabilityFragmentShadingRateKHR = 4422,

+    CapabilitySubgroupBallotKHR = 4423,

+    CapabilityDrawParameters = 4427,

+    CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,

+    CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,

+    CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,

+    CapabilitySubgroupVoteKHR = 4431,

+    CapabilityStorageBuffer16BitAccess = 4433,

+    CapabilityStorageUniformBufferBlock16 = 4433,

+    CapabilityStorageUniform16 = 4434,

+    CapabilityUniformAndStorageBuffer16BitAccess = 4434,

+    CapabilityStoragePushConstant16 = 4435,

+    CapabilityStorageInputOutput16 = 4436,

+    CapabilityDeviceGroup = 4437,

+    CapabilityMultiView = 4439,

+    CapabilityVariablePointersStorageBuffer = 4441,

+    CapabilityVariablePointers = 4442,

+    CapabilityAtomicStorageOps = 4445,

+    CapabilitySampleMaskPostDepthCoverage = 4447,

+    CapabilityStorageBuffer8BitAccess = 4448,

+    CapabilityUniformAndStorageBuffer8BitAccess = 4449,

+    CapabilityStoragePushConstant8 = 4450,

+    CapabilityDenormPreserve = 4464,

+    CapabilityDenormFlushToZero = 4465,

+    CapabilitySignedZeroInfNanPreserve = 4466,

+    CapabilityRoundingModeRTE = 4467,

+    CapabilityRoundingModeRTZ = 4468,

+    CapabilityRayQueryProvisionalKHR = 4471,

+    CapabilityRayQueryKHR = 4472,

+    CapabilityRayTraversalPrimitiveCullingKHR = 4478,

+    CapabilityRayTracingKHR = 4479,

+    CapabilityFloat16ImageAMD = 5008,

+    CapabilityImageGatherBiasLodAMD = 5009,

+    CapabilityFragmentMaskAMD = 5010,

+    CapabilityStencilExportEXT = 5013,

+    CapabilityImageReadWriteLodAMD = 5015,

+    CapabilityInt64ImageEXT = 5016,

+    CapabilityShaderClockKHR = 5055,

+    CapabilitySampleMaskOverrideCoverageNV = 5249,

+    CapabilityGeometryShaderPassthroughNV = 5251,

+    CapabilityShaderViewportIndexLayerEXT = 5254,

+    CapabilityShaderViewportIndexLayerNV = 5254,

+    CapabilityShaderViewportMaskNV = 5255,

+    CapabilityShaderStereoViewNV = 5259,

+    CapabilityPerViewAttributesNV = 5260,

+    CapabilityFragmentFullyCoveredEXT = 5265,

+    CapabilityMeshShadingNV = 5266,

+    CapabilityImageFootprintNV = 5282,

+    CapabilityMeshShadingEXT = 5283,

+	CapabilityFragmentBarycentricKHR = 5284,

+    CapabilityFragmentBarycentricNV = 5284,

+    CapabilityComputeDerivativeGroupQuadsNV = 5288,

+    CapabilityFragmentDensityEXT = 5291,

+    CapabilityShadingRateNV = 5291,

+    CapabilityGroupNonUniformPartitionedNV = 5297,

+    CapabilityShaderNonUniform = 5301,

+    CapabilityShaderNonUniformEXT = 5301,

+    CapabilityRuntimeDescriptorArray = 5302,

+    CapabilityRuntimeDescriptorArrayEXT = 5302,

+    CapabilityInputAttachmentArrayDynamicIndexing = 5303,

+    CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,

+    CapabilityUniformTexelBufferArrayDynamicIndexing = 5304,

+    CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,

+    CapabilityStorageTexelBufferArrayDynamicIndexing = 5305,

+    CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,

+    CapabilityUniformBufferArrayNonUniformIndexing = 5306,

+    CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,

+    CapabilitySampledImageArrayNonUniformIndexing = 5307,

+    CapabilitySampledImageArrayNonUniformIndexingEXT = 5307,

+    CapabilityStorageBufferArrayNonUniformIndexing = 5308,

+    CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,

+    CapabilityStorageImageArrayNonUniformIndexing = 5309,

+    CapabilityStorageImageArrayNonUniformIndexingEXT = 5309,

+    CapabilityInputAttachmentArrayNonUniformIndexing = 5310,

+    CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,

+    CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311,

+    CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,

+    CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,

+    CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,

+    CapabilityRayTracingNV = 5340,

+    CapabilityRayTracingMotionBlurNV = 5341,

+    CapabilityVulkanMemoryModel = 5345,

+    CapabilityVulkanMemoryModelKHR = 5345,

+    CapabilityVulkanMemoryModelDeviceScope = 5346,

+    CapabilityVulkanMemoryModelDeviceScopeKHR = 5346,

+    CapabilityPhysicalStorageBufferAddresses = 5347,

+    CapabilityPhysicalStorageBufferAddressesEXT = 5347,

+    CapabilityComputeDerivativeGroupLinearNV = 5350,

+    CapabilityRayTracingProvisionalKHR = 5353,

+    CapabilityCooperativeMatrixNV = 5357,

+    CapabilityFragmentShaderSampleInterlockEXT = 5363,

+    CapabilityFragmentShaderShadingRateInterlockEXT = 5372,

+    CapabilityShaderSMBuiltinsNV = 5373,

+    CapabilityFragmentShaderPixelInterlockEXT = 5378,

+    CapabilityDemoteToHelperInvocation = 5379,

+    CapabilityDemoteToHelperInvocationEXT = 5379,

+    CapabilityBindlessTextureNV = 5390,

+    CapabilitySubgroupShuffleINTEL = 5568,

+    CapabilitySubgroupBufferBlockIOINTEL = 5569,

+    CapabilitySubgroupImageBlockIOINTEL = 5570,

+    CapabilitySubgroupImageMediaBlockIOINTEL = 5579,

+    CapabilityRoundToInfinityINTEL = 5582,

+    CapabilityFloatingPointModeINTEL = 5583,

+    CapabilityIntegerFunctions2INTEL = 5584,

+    CapabilityFunctionPointersINTEL = 5603,

+    CapabilityIndirectReferencesINTEL = 5604,

+    CapabilityAsmINTEL = 5606,

+    CapabilityAtomicFloat32MinMaxEXT = 5612,

+    CapabilityAtomicFloat64MinMaxEXT = 5613,

+    CapabilityAtomicFloat16MinMaxEXT = 5616,

+    CapabilityVectorComputeINTEL = 5617,

+    CapabilityVectorAnyINTEL = 5619,

+    CapabilityExpectAssumeKHR = 5629,

+    CapabilitySubgroupAvcMotionEstimationINTEL = 5696,

+    CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,

+    CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,

+    CapabilityVariableLengthArrayINTEL = 5817,

+    CapabilityFunctionFloatControlINTEL = 5821,

+    CapabilityFPGAMemoryAttributesINTEL = 5824,

+    CapabilityFPFastMathModeINTEL = 5837,

+    CapabilityArbitraryPrecisionIntegersINTEL = 5844,

+    CapabilityArbitraryPrecisionFloatingPointINTEL = 5845,

+    CapabilityUnstructuredLoopControlsINTEL = 5886,

+    CapabilityFPGALoopControlsINTEL = 5888,

+    CapabilityKernelAttributesINTEL = 5892,

+    CapabilityFPGAKernelAttributesINTEL = 5897,

+    CapabilityFPGAMemoryAccessesINTEL = 5898,

+    CapabilityFPGAClusterAttributesINTEL = 5904,

+    CapabilityLoopFuseINTEL = 5906,

+    CapabilityFPGABufferLocationINTEL = 5920,

+    CapabilityArbitraryPrecisionFixedPointINTEL = 5922,

+    CapabilityUSMStorageClassesINTEL = 5935,

+    CapabilityIOPipesINTEL = 5943,

+    CapabilityBlockingPipesINTEL = 5945,

+    CapabilityFPGARegINTEL = 5948,

+    CapabilityDotProductInputAll = 6016,

+    CapabilityDotProductInputAllKHR = 6016,

+    CapabilityDotProductInput4x8Bit = 6017,

+    CapabilityDotProductInput4x8BitKHR = 6017,

+    CapabilityDotProductInput4x8BitPacked = 6018,

+    CapabilityDotProductInput4x8BitPackedKHR = 6018,

+    CapabilityDotProduct = 6019,

+    CapabilityDotProductKHR = 6019,

+    CapabilityRayCullMaskKHR = 6020,

+    CapabilityBitInstructions = 6025,

+    CapabilityAtomicFloat32AddEXT = 6033,

+    CapabilityAtomicFloat64AddEXT = 6034,

+    CapabilityLongConstantCompositeINTEL = 6089,

+    CapabilityOptNoneINTEL = 6094,

+    CapabilityAtomicFloat16AddEXT = 6095,

+    CapabilityDebugInfoModuleINTEL = 6114,

+    CapabilityMax = 0x7fffffff,

+};

+

+enum RayFlagsShift {

+    RayFlagsOpaqueKHRShift = 0,

+    RayFlagsNoOpaqueKHRShift = 1,

+    RayFlagsTerminateOnFirstHitKHRShift = 2,

+    RayFlagsSkipClosestHitShaderKHRShift = 3,

+    RayFlagsCullBackFacingTrianglesKHRShift = 4,

+    RayFlagsCullFrontFacingTrianglesKHRShift = 5,

+    RayFlagsCullOpaqueKHRShift = 6,

+    RayFlagsCullNoOpaqueKHRShift = 7,

+    RayFlagsSkipTrianglesKHRShift = 8,

+    RayFlagsSkipAABBsKHRShift = 9,

+    RayFlagsMax = 0x7fffffff,

+};

+

+enum RayFlagsMask {

+    RayFlagsMaskNone = 0,

+    RayFlagsOpaqueKHRMask = 0x00000001,

+    RayFlagsNoOpaqueKHRMask = 0x00000002,

+    RayFlagsTerminateOnFirstHitKHRMask = 0x00000004,

+    RayFlagsSkipClosestHitShaderKHRMask = 0x00000008,

+    RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010,

+    RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020,

+    RayFlagsCullOpaqueKHRMask = 0x00000040,

+    RayFlagsCullNoOpaqueKHRMask = 0x00000080,

+    RayFlagsSkipTrianglesKHRMask = 0x00000100,

+    RayFlagsSkipAABBsKHRMask = 0x00000200,

+};

+

+enum RayQueryIntersection {

+    RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0,

+    RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1,

+    RayQueryIntersectionMax = 0x7fffffff,

+};

+

+enum RayQueryCommittedIntersectionType {

+    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0,

+    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1,

+    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2,

+    RayQueryCommittedIntersectionTypeMax = 0x7fffffff,

+};

+

+enum RayQueryCandidateIntersectionType {

+    RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0,

+    RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1,

+    RayQueryCandidateIntersectionTypeMax = 0x7fffffff,

+};

+

+enum FragmentShadingRateShift {

+    FragmentShadingRateVertical2PixelsShift = 0,

+    FragmentShadingRateVertical4PixelsShift = 1,

+    FragmentShadingRateHorizontal2PixelsShift = 2,

+    FragmentShadingRateHorizontal4PixelsShift = 3,

+    FragmentShadingRateMax = 0x7fffffff,

+};

+

+enum FragmentShadingRateMask {

+    FragmentShadingRateMaskNone = 0,

+    FragmentShadingRateVertical2PixelsMask = 0x00000001,

+    FragmentShadingRateVertical4PixelsMask = 0x00000002,

+    FragmentShadingRateHorizontal2PixelsMask = 0x00000004,

+    FragmentShadingRateHorizontal4PixelsMask = 0x00000008,

+};

+

+enum FPDenormMode {

+    FPDenormModePreserve = 0,

+    FPDenormModeFlushToZero = 1,

+    FPDenormModeMax = 0x7fffffff,

+};

+

+enum FPOperationMode {

+    FPOperationModeIEEE = 0,

+    FPOperationModeALT = 1,

+    FPOperationModeMax = 0x7fffffff,

+};

+

+enum QuantizationModes {

+    QuantizationModesTRN = 0,

+    QuantizationModesTRN_ZERO = 1,

+    QuantizationModesRND = 2,

+    QuantizationModesRND_ZERO = 3,

+    QuantizationModesRND_INF = 4,

+    QuantizationModesRND_MIN_INF = 5,

+    QuantizationModesRND_CONV = 6,

+    QuantizationModesRND_CONV_ODD = 7,

+    QuantizationModesMax = 0x7fffffff,

+};

+

+enum OverflowModes {

+    OverflowModesWRAP = 0,

+    OverflowModesSAT = 1,

+    OverflowModesSAT_ZERO = 2,

+    OverflowModesSAT_SYM = 3,

+    OverflowModesMax = 0x7fffffff,

+};

+

+enum PackedVectorFormat {

+    PackedVectorFormatPackedVectorFormat4x8Bit = 0,

+    PackedVectorFormatPackedVectorFormat4x8BitKHR = 0,

+    PackedVectorFormatMax = 0x7fffffff,

+};

+

+enum Op {

+    OpNop = 0,

+    OpUndef = 1,

+    OpSourceContinued = 2,

+    OpSource = 3,

+    OpSourceExtension = 4,

+    OpName = 5,

+    OpMemberName = 6,

+    OpString = 7,

+    OpLine = 8,

+    OpExtension = 10,

+    OpExtInstImport = 11,

+    OpExtInst = 12,

+    OpMemoryModel = 14,

+    OpEntryPoint = 15,

+    OpExecutionMode = 16,

+    OpCapability = 17,

+    OpTypeVoid = 19,

+    OpTypeBool = 20,

+    OpTypeInt = 21,

+    OpTypeFloat = 22,

+    OpTypeVector = 23,

+    OpTypeMatrix = 24,

+    OpTypeImage = 25,

+    OpTypeSampler = 26,

+    OpTypeSampledImage = 27,

+    OpTypeArray = 28,

+    OpTypeRuntimeArray = 29,

+    OpTypeStruct = 30,

+    OpTypeOpaque = 31,

+    OpTypePointer = 32,

+    OpTypeFunction = 33,

+    OpTypeEvent = 34,

+    OpTypeDeviceEvent = 35,

+    OpTypeReserveId = 36,

+    OpTypeQueue = 37,

+    OpTypePipe = 38,

+    OpTypeForwardPointer = 39,

+    OpConstantTrue = 41,

+    OpConstantFalse = 42,

+    OpConstant = 43,

+    OpConstantComposite = 44,

+    OpConstantSampler = 45,

+    OpConstantNull = 46,

+    OpSpecConstantTrue = 48,

+    OpSpecConstantFalse = 49,

+    OpSpecConstant = 50,

+    OpSpecConstantComposite = 51,

+    OpSpecConstantOp = 52,

+    OpFunction = 54,

+    OpFunctionParameter = 55,

+    OpFunctionEnd = 56,

+    OpFunctionCall = 57,

+    OpVariable = 59,

+    OpImageTexelPointer = 60,

+    OpLoad = 61,

+    OpStore = 62,

+    OpCopyMemory = 63,

+    OpCopyMemorySized = 64,

+    OpAccessChain = 65,

+    OpInBoundsAccessChain = 66,

+    OpPtrAccessChain = 67,

+    OpArrayLength = 68,

+    OpGenericPtrMemSemantics = 69,

+    OpInBoundsPtrAccessChain = 70,

+    OpDecorate = 71,

+    OpMemberDecorate = 72,

+    OpDecorationGroup = 73,

+    OpGroupDecorate = 74,

+    OpGroupMemberDecorate = 75,

+    OpVectorExtractDynamic = 77,

+    OpVectorInsertDynamic = 78,

+    OpVectorShuffle = 79,

+    OpCompositeConstruct = 80,

+    OpCompositeExtract = 81,

+    OpCompositeInsert = 82,

+    OpCopyObject = 83,

+    OpTranspose = 84,

+    OpSampledImage = 86,

+    OpImageSampleImplicitLod = 87,

+    OpImageSampleExplicitLod = 88,

+    OpImageSampleDrefImplicitLod = 89,

+    OpImageSampleDrefExplicitLod = 90,

+    OpImageSampleProjImplicitLod = 91,

+    OpImageSampleProjExplicitLod = 92,

+    OpImageSampleProjDrefImplicitLod = 93,

+    OpImageSampleProjDrefExplicitLod = 94,

+    OpImageFetch = 95,

+    OpImageGather = 96,

+    OpImageDrefGather = 97,

+    OpImageRead = 98,

+    OpImageWrite = 99,

+    OpImage = 100,

+    OpImageQueryFormat = 101,

+    OpImageQueryOrder = 102,

+    OpImageQuerySizeLod = 103,

+    OpImageQuerySize = 104,

+    OpImageQueryLod = 105,

+    OpImageQueryLevels = 106,

+    OpImageQuerySamples = 107,

+    OpConvertFToU = 109,

+    OpConvertFToS = 110,

+    OpConvertSToF = 111,

+    OpConvertUToF = 112,

+    OpUConvert = 113,

+    OpSConvert = 114,

+    OpFConvert = 115,

+    OpQuantizeToF16 = 116,

+    OpConvertPtrToU = 117,

+    OpSatConvertSToU = 118,

+    OpSatConvertUToS = 119,

+    OpConvertUToPtr = 120,

+    OpPtrCastToGeneric = 121,

+    OpGenericCastToPtr = 122,

+    OpGenericCastToPtrExplicit = 123,

+    OpBitcast = 124,

+    OpSNegate = 126,

+    OpFNegate = 127,

+    OpIAdd = 128,

+    OpFAdd = 129,

+    OpISub = 130,

+    OpFSub = 131,

+    OpIMul = 132,

+    OpFMul = 133,

+    OpUDiv = 134,

+    OpSDiv = 135,

+    OpFDiv = 136,

+    OpUMod = 137,

+    OpSRem = 138,

+    OpSMod = 139,

+    OpFRem = 140,

+    OpFMod = 141,

+    OpVectorTimesScalar = 142,

+    OpMatrixTimesScalar = 143,

+    OpVectorTimesMatrix = 144,

+    OpMatrixTimesVector = 145,

+    OpMatrixTimesMatrix = 146,

+    OpOuterProduct = 147,

+    OpDot = 148,

+    OpIAddCarry = 149,

+    OpISubBorrow = 150,

+    OpUMulExtended = 151,

+    OpSMulExtended = 152,

+    OpAny = 154,

+    OpAll = 155,

+    OpIsNan = 156,

+    OpIsInf = 157,

+    OpIsFinite = 158,

+    OpIsNormal = 159,

+    OpSignBitSet = 160,

+    OpLessOrGreater = 161,

+    OpOrdered = 162,

+    OpUnordered = 163,

+    OpLogicalEqual = 164,

+    OpLogicalNotEqual = 165,

+    OpLogicalOr = 166,

+    OpLogicalAnd = 167,

+    OpLogicalNot = 168,

+    OpSelect = 169,

+    OpIEqual = 170,

+    OpINotEqual = 171,

+    OpUGreaterThan = 172,

+    OpSGreaterThan = 173,

+    OpUGreaterThanEqual = 174,

+    OpSGreaterThanEqual = 175,

+    OpULessThan = 176,

+    OpSLessThan = 177,

+    OpULessThanEqual = 178,

+    OpSLessThanEqual = 179,

+    OpFOrdEqual = 180,

+    OpFUnordEqual = 181,

+    OpFOrdNotEqual = 182,

+    OpFUnordNotEqual = 183,

+    OpFOrdLessThan = 184,

+    OpFUnordLessThan = 185,

+    OpFOrdGreaterThan = 186,

+    OpFUnordGreaterThan = 187,

+    OpFOrdLessThanEqual = 188,

+    OpFUnordLessThanEqual = 189,

+    OpFOrdGreaterThanEqual = 190,

+    OpFUnordGreaterThanEqual = 191,

+    OpShiftRightLogical = 194,

+    OpShiftRightArithmetic = 195,

+    OpShiftLeftLogical = 196,

+    OpBitwiseOr = 197,

+    OpBitwiseXor = 198,

+    OpBitwiseAnd = 199,

+    OpNot = 200,

+    OpBitFieldInsert = 201,

+    OpBitFieldSExtract = 202,

+    OpBitFieldUExtract = 203,

+    OpBitReverse = 204,

+    OpBitCount = 205,

+    OpDPdx = 207,

+    OpDPdy = 208,

+    OpFwidth = 209,

+    OpDPdxFine = 210,

+    OpDPdyFine = 211,

+    OpFwidthFine = 212,

+    OpDPdxCoarse = 213,

+    OpDPdyCoarse = 214,

+    OpFwidthCoarse = 215,

+    OpEmitVertex = 218,

+    OpEndPrimitive = 219,

+    OpEmitStreamVertex = 220,

+    OpEndStreamPrimitive = 221,

+    OpControlBarrier = 224,

+    OpMemoryBarrier = 225,

+    OpAtomicLoad = 227,

+    OpAtomicStore = 228,

+    OpAtomicExchange = 229,

+    OpAtomicCompareExchange = 230,

+    OpAtomicCompareExchangeWeak = 231,

+    OpAtomicIIncrement = 232,

+    OpAtomicIDecrement = 233,

+    OpAtomicIAdd = 234,

+    OpAtomicISub = 235,

+    OpAtomicSMin = 236,

+    OpAtomicUMin = 237,

+    OpAtomicSMax = 238,

+    OpAtomicUMax = 239,

+    OpAtomicAnd = 240,

+    OpAtomicOr = 241,

+    OpAtomicXor = 242,

+    OpPhi = 245,

+    OpLoopMerge = 246,

+    OpSelectionMerge = 247,

+    OpLabel = 248,

+    OpBranch = 249,

+    OpBranchConditional = 250,

+    OpSwitch = 251,

+    OpKill = 252,

+    OpReturn = 253,

+    OpReturnValue = 254,

+    OpUnreachable = 255,

+    OpLifetimeStart = 256,

+    OpLifetimeStop = 257,

+    OpGroupAsyncCopy = 259,

+    OpGroupWaitEvents = 260,

+    OpGroupAll = 261,

+    OpGroupAny = 262,

+    OpGroupBroadcast = 263,

+    OpGroupIAdd = 264,

+    OpGroupFAdd = 265,

+    OpGroupFMin = 266,

+    OpGroupUMin = 267,

+    OpGroupSMin = 268,

+    OpGroupFMax = 269,

+    OpGroupUMax = 270,

+    OpGroupSMax = 271,

+    OpReadPipe = 274,

+    OpWritePipe = 275,

+    OpReservedReadPipe = 276,

+    OpReservedWritePipe = 277,

+    OpReserveReadPipePackets = 278,

+    OpReserveWritePipePackets = 279,

+    OpCommitReadPipe = 280,

+    OpCommitWritePipe = 281,

+    OpIsValidReserveId = 282,

+    OpGetNumPipePackets = 283,

+    OpGetMaxPipePackets = 284,

+    OpGroupReserveReadPipePackets = 285,

+    OpGroupReserveWritePipePackets = 286,

+    OpGroupCommitReadPipe = 287,

+    OpGroupCommitWritePipe = 288,

+    OpEnqueueMarker = 291,

+    OpEnqueueKernel = 292,

+    OpGetKernelNDrangeSubGroupCount = 293,

+    OpGetKernelNDrangeMaxSubGroupSize = 294,

+    OpGetKernelWorkGroupSize = 295,

+    OpGetKernelPreferredWorkGroupSizeMultiple = 296,

+    OpRetainEvent = 297,

+    OpReleaseEvent = 298,

+    OpCreateUserEvent = 299,

+    OpIsValidEvent = 300,

+    OpSetUserEventStatus = 301,

+    OpCaptureEventProfilingInfo = 302,

+    OpGetDefaultQueue = 303,

+    OpBuildNDRange = 304,

+    OpImageSparseSampleImplicitLod = 305,

+    OpImageSparseSampleExplicitLod = 306,

+    OpImageSparseSampleDrefImplicitLod = 307,

+    OpImageSparseSampleDrefExplicitLod = 308,

+    OpImageSparseSampleProjImplicitLod = 309,

+    OpImageSparseSampleProjExplicitLod = 310,

+    OpImageSparseSampleProjDrefImplicitLod = 311,

+    OpImageSparseSampleProjDrefExplicitLod = 312,

+    OpImageSparseFetch = 313,

+    OpImageSparseGather = 314,

+    OpImageSparseDrefGather = 315,

+    OpImageSparseTexelsResident = 316,

+    OpNoLine = 317,

+    OpAtomicFlagTestAndSet = 318,

+    OpAtomicFlagClear = 319,

+    OpImageSparseRead = 320,

+    OpSizeOf = 321,

+    OpTypePipeStorage = 322,

+    OpConstantPipeStorage = 323,

+    OpCreatePipeFromPipeStorage = 324,

+    OpGetKernelLocalSizeForSubgroupCount = 325,

+    OpGetKernelMaxNumSubgroups = 326,

+    OpTypeNamedBarrier = 327,

+    OpNamedBarrierInitialize = 328,

+    OpMemoryNamedBarrier = 329,

+    OpModuleProcessed = 330,

+    OpExecutionModeId = 331,

+    OpDecorateId = 332,

+    OpGroupNonUniformElect = 333,

+    OpGroupNonUniformAll = 334,

+    OpGroupNonUniformAny = 335,

+    OpGroupNonUniformAllEqual = 336,

+    OpGroupNonUniformBroadcast = 337,

+    OpGroupNonUniformBroadcastFirst = 338,

+    OpGroupNonUniformBallot = 339,

+    OpGroupNonUniformInverseBallot = 340,

+    OpGroupNonUniformBallotBitExtract = 341,

+    OpGroupNonUniformBallotBitCount = 342,

+    OpGroupNonUniformBallotFindLSB = 343,

+    OpGroupNonUniformBallotFindMSB = 344,

+    OpGroupNonUniformShuffle = 345,

+    OpGroupNonUniformShuffleXor = 346,

+    OpGroupNonUniformShuffleUp = 347,

+    OpGroupNonUniformShuffleDown = 348,

+    OpGroupNonUniformIAdd = 349,

+    OpGroupNonUniformFAdd = 350,

+    OpGroupNonUniformIMul = 351,

+    OpGroupNonUniformFMul = 352,

+    OpGroupNonUniformSMin = 353,

+    OpGroupNonUniformUMin = 354,

+    OpGroupNonUniformFMin = 355,

+    OpGroupNonUniformSMax = 356,

+    OpGroupNonUniformUMax = 357,

+    OpGroupNonUniformFMax = 358,

+    OpGroupNonUniformBitwiseAnd = 359,

+    OpGroupNonUniformBitwiseOr = 360,

+    OpGroupNonUniformBitwiseXor = 361,

+    OpGroupNonUniformLogicalAnd = 362,

+    OpGroupNonUniformLogicalOr = 363,

+    OpGroupNonUniformLogicalXor = 364,

+    OpGroupNonUniformQuadBroadcast = 365,

+    OpGroupNonUniformQuadSwap = 366,

+    OpCopyLogical = 400,

+    OpPtrEqual = 401,

+    OpPtrNotEqual = 402,

+    OpPtrDiff = 403,

+    OpTerminateInvocation = 4416,

+    OpSubgroupBallotKHR = 4421,

+    OpSubgroupFirstInvocationKHR = 4422,

+    OpSubgroupAllKHR = 4428,

+    OpSubgroupAnyKHR = 4429,

+    OpSubgroupAllEqualKHR = 4430,

+    OpSubgroupReadInvocationKHR = 4432,

+    OpTraceRayKHR = 4445,

+    OpExecuteCallableKHR = 4446,

+    OpConvertUToAccelerationStructureKHR = 4447,

+    OpIgnoreIntersectionKHR = 4448,

+    OpTerminateRayKHR = 4449,

+    OpSDot = 4450,

+    OpSDotKHR = 4450,

+    OpUDot = 4451,

+    OpUDotKHR = 4451,

+    OpSUDot = 4452,

+    OpSUDotKHR = 4452,

+    OpSDotAccSat = 4453,

+    OpSDotAccSatKHR = 4453,

+    OpUDotAccSat = 4454,

+    OpUDotAccSatKHR = 4454,

+    OpSUDotAccSat = 4455,

+    OpSUDotAccSatKHR = 4455,

+    OpTypeRayQueryKHR = 4472,

+    OpRayQueryInitializeKHR = 4473,

+    OpRayQueryTerminateKHR = 4474,

+    OpRayQueryGenerateIntersectionKHR = 4475,

+    OpRayQueryConfirmIntersectionKHR = 4476,

+    OpRayQueryProceedKHR = 4477,

+    OpRayQueryGetIntersectionTypeKHR = 4479,

+    OpGroupIAddNonUniformAMD = 5000,

+    OpGroupFAddNonUniformAMD = 5001,

+    OpGroupFMinNonUniformAMD = 5002,

+    OpGroupUMinNonUniformAMD = 5003,

+    OpGroupSMinNonUniformAMD = 5004,

+    OpGroupFMaxNonUniformAMD = 5005,

+    OpGroupUMaxNonUniformAMD = 5006,

+    OpGroupSMaxNonUniformAMD = 5007,

+    OpFragmentMaskFetchAMD = 5011,

+    OpFragmentFetchAMD = 5012,

+    OpReadClockKHR = 5056,

+    OpImageSampleFootprintNV = 5283,

+    OpEmitMeshTasksEXT = 5294,

+    OpSetMeshOutputsEXT = 5295,

+    OpGroupNonUniformPartitionNV = 5296,

+    OpWritePackedPrimitiveIndices4x8NV = 5299,

+    OpReportIntersectionKHR = 5334,

+    OpReportIntersectionNV = 5334,

+    OpIgnoreIntersectionNV = 5335,

+    OpTerminateRayNV = 5336,

+    OpTraceNV = 5337,

+    OpTraceMotionNV = 5338,

+    OpTraceRayMotionNV = 5339,

+    OpTypeAccelerationStructureKHR = 5341,

+    OpTypeAccelerationStructureNV = 5341,

+    OpExecuteCallableNV = 5344,

+    OpTypeCooperativeMatrixNV = 5358,

+    OpCooperativeMatrixLoadNV = 5359,

+    OpCooperativeMatrixStoreNV = 5360,

+    OpCooperativeMatrixMulAddNV = 5361,

+    OpCooperativeMatrixLengthNV = 5362,

+    OpBeginInvocationInterlockEXT = 5364,

+    OpEndInvocationInterlockEXT = 5365,

+    OpDemoteToHelperInvocation = 5380,

+    OpDemoteToHelperInvocationEXT = 5380,

+    OpIsHelperInvocationEXT = 5381,

+    OpConvertUToImageNV = 5391,

+    OpConvertUToSamplerNV = 5392,

+    OpConvertImageToUNV = 5393,

+    OpConvertSamplerToUNV = 5394,

+    OpConvertUToSampledImageNV = 5395,

+    OpConvertSampledImageToUNV = 5396,

+    OpSamplerImageAddressingModeNV = 5397,

+    OpSubgroupShuffleINTEL = 5571,

+    OpSubgroupShuffleDownINTEL = 5572,

+    OpSubgroupShuffleUpINTEL = 5573,

+    OpSubgroupShuffleXorINTEL = 5574,

+    OpSubgroupBlockReadINTEL = 5575,

+    OpSubgroupBlockWriteINTEL = 5576,

+    OpSubgroupImageBlockReadINTEL = 5577,

+    OpSubgroupImageBlockWriteINTEL = 5578,

+    OpSubgroupImageMediaBlockReadINTEL = 5580,

+    OpSubgroupImageMediaBlockWriteINTEL = 5581,

+    OpUCountLeadingZerosINTEL = 5585,

+    OpUCountTrailingZerosINTEL = 5586,

+    OpAbsISubINTEL = 5587,

+    OpAbsUSubINTEL = 5588,

+    OpIAddSatINTEL = 5589,

+    OpUAddSatINTEL = 5590,

+    OpIAverageINTEL = 5591,

+    OpUAverageINTEL = 5592,

+    OpIAverageRoundedINTEL = 5593,

+    OpUAverageRoundedINTEL = 5594,

+    OpISubSatINTEL = 5595,

+    OpUSubSatINTEL = 5596,

+    OpIMul32x16INTEL = 5597,

+    OpUMul32x16INTEL = 5598,

+    OpConstantFunctionPointerINTEL = 5600,

+    OpFunctionPointerCallINTEL = 5601,

+    OpAsmTargetINTEL = 5609,

+    OpAsmINTEL = 5610,

+    OpAsmCallINTEL = 5611,

+    OpAtomicFMinEXT = 5614,

+    OpAtomicFMaxEXT = 5615,

+    OpAssumeTrueKHR = 5630,

+    OpExpectKHR = 5631,

+    OpDecorateString = 5632,

+    OpDecorateStringGOOGLE = 5632,

+    OpMemberDecorateString = 5633,

+    OpMemberDecorateStringGOOGLE = 5633,

+    OpVmeImageINTEL = 5699,

+    OpTypeVmeImageINTEL = 5700,

+    OpTypeAvcImePayloadINTEL = 5701,

+    OpTypeAvcRefPayloadINTEL = 5702,

+    OpTypeAvcSicPayloadINTEL = 5703,

+    OpTypeAvcMcePayloadINTEL = 5704,

+    OpTypeAvcMceResultINTEL = 5705,

+    OpTypeAvcImeResultINTEL = 5706,

+    OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,

+    OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,

+    OpTypeAvcImeSingleReferenceStreaminINTEL = 5709,

+    OpTypeAvcImeDualReferenceStreaminINTEL = 5710,

+    OpTypeAvcRefResultINTEL = 5711,

+    OpTypeAvcSicResultINTEL = 5712,

+    OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,

+    OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,

+    OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,

+    OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,

+    OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,

+    OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,

+    OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,

+    OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,

+    OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,

+    OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,

+    OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,

+    OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,

+    OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,

+    OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,

+    OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,

+    OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,

+    OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,

+    OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,

+    OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,

+    OpSubgroupAvcMceConvertToImePayloadINTEL = 5732,

+    OpSubgroupAvcMceConvertToImeResultINTEL = 5733,

+    OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,

+    OpSubgroupAvcMceConvertToRefResultINTEL = 5735,

+    OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,

+    OpSubgroupAvcMceConvertToSicResultINTEL = 5737,

+    OpSubgroupAvcMceGetMotionVectorsINTEL = 5738,

+    OpSubgroupAvcMceGetInterDistortionsINTEL = 5739,

+    OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,

+    OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,

+    OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,

+    OpSubgroupAvcMceGetInterDirectionsINTEL = 5743,

+    OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,

+    OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,

+    OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,

+    OpSubgroupAvcImeInitializeINTEL = 5747,

+    OpSubgroupAvcImeSetSingleReferenceINTEL = 5748,

+    OpSubgroupAvcImeSetDualReferenceINTEL = 5749,

+    OpSubgroupAvcImeRefWindowSizeINTEL = 5750,

+    OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,

+    OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,

+    OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,

+    OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,

+    OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,

+    OpSubgroupAvcImeSetWeightedSadINTEL = 5756,

+    OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,

+    OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,

+    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,

+    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,

+    OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,

+    OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,

+    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,

+    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,

+    OpSubgroupAvcImeConvertToMceResultINTEL = 5765,

+    OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,

+    OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,

+    OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,

+    OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,

+    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770,

+    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771,

+    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772,

+    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773,

+    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,

+    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775,

+    OpSubgroupAvcImeGetBorderReachedINTEL = 5776,

+    OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,

+    OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,

+    OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,

+    OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,

+    OpSubgroupAvcFmeInitializeINTEL = 5781,

+    OpSubgroupAvcBmeInitializeINTEL = 5782,

+    OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,

+    OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,

+    OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,

+    OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,

+    OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,

+    OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,

+    OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,

+    OpSubgroupAvcRefConvertToMceResultINTEL = 5790,

+    OpSubgroupAvcSicInitializeINTEL = 5791,

+    OpSubgroupAvcSicConfigureSkcINTEL = 5792,

+    OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,

+    OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,

+    OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,

+    OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,

+    OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,

+    OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,

+    OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,

+    OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,

+    OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,

+    OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,

+    OpSubgroupAvcSicEvaluateIpeINTEL = 5803,

+    OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,

+    OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,

+    OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,

+    OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,

+    OpSubgroupAvcSicConvertToMceResultINTEL = 5808,

+    OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,

+    OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,

+    OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,

+    OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,

+    OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,

+    OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,

+    OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,

+    OpSubgroupAvcSicGetInterRawSadsINTEL = 5816,

+    OpVariableLengthArrayINTEL = 5818,

+    OpSaveMemoryINTEL = 5819,

+    OpRestoreMemoryINTEL = 5820,

+    OpArbitraryFloatSinCosPiINTEL = 5840,

+    OpArbitraryFloatCastINTEL = 5841,

+    OpArbitraryFloatCastFromIntINTEL = 5842,

+    OpArbitraryFloatCastToIntINTEL = 5843,

+    OpArbitraryFloatAddINTEL = 5846,

+    OpArbitraryFloatSubINTEL = 5847,

+    OpArbitraryFloatMulINTEL = 5848,

+    OpArbitraryFloatDivINTEL = 5849,

+    OpArbitraryFloatGTINTEL = 5850,

+    OpArbitraryFloatGEINTEL = 5851,

+    OpArbitraryFloatLTINTEL = 5852,

+    OpArbitraryFloatLEINTEL = 5853,

+    OpArbitraryFloatEQINTEL = 5854,

+    OpArbitraryFloatRecipINTEL = 5855,

+    OpArbitraryFloatRSqrtINTEL = 5856,

+    OpArbitraryFloatCbrtINTEL = 5857,

+    OpArbitraryFloatHypotINTEL = 5858,

+    OpArbitraryFloatSqrtINTEL = 5859,

+    OpArbitraryFloatLogINTEL = 5860,

+    OpArbitraryFloatLog2INTEL = 5861,

+    OpArbitraryFloatLog10INTEL = 5862,

+    OpArbitraryFloatLog1pINTEL = 5863,

+    OpArbitraryFloatExpINTEL = 5864,

+    OpArbitraryFloatExp2INTEL = 5865,

+    OpArbitraryFloatExp10INTEL = 5866,

+    OpArbitraryFloatExpm1INTEL = 5867,

+    OpArbitraryFloatSinINTEL = 5868,

+    OpArbitraryFloatCosINTEL = 5869,

+    OpArbitraryFloatSinCosINTEL = 5870,

+    OpArbitraryFloatSinPiINTEL = 5871,

+    OpArbitraryFloatCosPiINTEL = 5872,

+    OpArbitraryFloatASinINTEL = 5873,

+    OpArbitraryFloatASinPiINTEL = 5874,

+    OpArbitraryFloatACosINTEL = 5875,

+    OpArbitraryFloatACosPiINTEL = 5876,

+    OpArbitraryFloatATanINTEL = 5877,

+    OpArbitraryFloatATanPiINTEL = 5878,

+    OpArbitraryFloatATan2INTEL = 5879,

+    OpArbitraryFloatPowINTEL = 5880,

+    OpArbitraryFloatPowRINTEL = 5881,

+    OpArbitraryFloatPowNINTEL = 5882,

+    OpLoopControlINTEL = 5887,

+    OpFixedSqrtINTEL = 5923,

+    OpFixedRecipINTEL = 5924,

+    OpFixedRsqrtINTEL = 5925,

+    OpFixedSinINTEL = 5926,

+    OpFixedCosINTEL = 5927,

+    OpFixedSinCosINTEL = 5928,

+    OpFixedSinPiINTEL = 5929,

+    OpFixedCosPiINTEL = 5930,

+    OpFixedSinCosPiINTEL = 5931,

+    OpFixedLogINTEL = 5932,

+    OpFixedExpINTEL = 5933,

+    OpPtrCastToCrossWorkgroupINTEL = 5934,

+    OpCrossWorkgroupCastToPtrINTEL = 5938,

+    OpReadPipeBlockingINTEL = 5946,

+    OpWritePipeBlockingINTEL = 5947,

+    OpFPGARegINTEL = 5949,

+    OpRayQueryGetRayTMinKHR = 6016,

+    OpRayQueryGetRayFlagsKHR = 6017,

+    OpRayQueryGetIntersectionTKHR = 6018,

+    OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019,

+    OpRayQueryGetIntersectionInstanceIdKHR = 6020,

+    OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,

+    OpRayQueryGetIntersectionGeometryIndexKHR = 6022,

+    OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023,

+    OpRayQueryGetIntersectionBarycentricsKHR = 6024,

+    OpRayQueryGetIntersectionFrontFaceKHR = 6025,

+    OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,

+    OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027,

+    OpRayQueryGetIntersectionObjectRayOriginKHR = 6028,

+    OpRayQueryGetWorldRayDirectionKHR = 6029,

+    OpRayQueryGetWorldRayOriginKHR = 6030,

+    OpRayQueryGetIntersectionObjectToWorldKHR = 6031,

+    OpRayQueryGetIntersectionWorldToObjectKHR = 6032,

+    OpAtomicFAddEXT = 6035,

+    OpTypeBufferSurfaceINTEL = 6086,

+    OpTypeStructContinuedINTEL = 6090,

+    OpConstantCompositeContinuedINTEL = 6091,

+    OpSpecConstantCompositeContinuedINTEL = 6092,

+    OpMax = 0x7fffffff,

+};

+

+#ifdef SPV_ENABLE_UTILITY_CODE

+inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {

+    *hasResult = *hasResultType = false;

+    switch (opcode) {

+    default: /* unknown opcode */ break;

+    case OpNop: *hasResult = false; *hasResultType = false; break;

+    case OpUndef: *hasResult = true; *hasResultType = true; break;

+    case OpSourceContinued: *hasResult = false; *hasResultType = false; break;

+    case OpSource: *hasResult = false; *hasResultType = false; break;

+    case OpSourceExtension: *hasResult = false; *hasResultType = false; break;

+    case OpName: *hasResult = false; *hasResultType = false; break;

+    case OpMemberName: *hasResult = false; *hasResultType = false; break;

+    case OpString: *hasResult = true; *hasResultType = false; break;

+    case OpLine: *hasResult = false; *hasResultType = false; break;

+    case OpExtension: *hasResult = false; *hasResultType = false; break;

+    case OpExtInstImport: *hasResult = true; *hasResultType = false; break;

+    case OpExtInst: *hasResult = true; *hasResultType = true; break;

+    case OpMemoryModel: *hasResult = false; *hasResultType = false; break;

+    case OpEntryPoint: *hasResult = false; *hasResultType = false; break;

+    case OpExecutionMode: *hasResult = false; *hasResultType = false; break;

+    case OpCapability: *hasResult = false; *hasResultType = false; break;

+    case OpTypeVoid: *hasResult = true; *hasResultType = false; break;

+    case OpTypeBool: *hasResult = true; *hasResultType = false; break;

+    case OpTypeInt: *hasResult = true; *hasResultType = false; break;

+    case OpTypeFloat: *hasResult = true; *hasResultType = false; break;

+    case OpTypeVector: *hasResult = true; *hasResultType = false; break;

+    case OpTypeMatrix: *hasResult = true; *hasResultType = false; break;

+    case OpTypeImage: *hasResult = true; *hasResultType = false; break;

+    case OpTypeSampler: *hasResult = true; *hasResultType = false; break;

+    case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break;

+    case OpTypeArray: *hasResult = true; *hasResultType = false; break;

+    case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;

+    case OpTypeStruct: *hasResult = true; *hasResultType = false; break;

+    case OpTypeOpaque: *hasResult = true; *hasResultType = false; break;

+    case OpTypePointer: *hasResult = true; *hasResultType = false; break;

+    case OpTypeFunction: *hasResult = true; *hasResultType = false; break;

+    case OpTypeEvent: *hasResult = true; *hasResultType = false; break;

+    case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;

+    case OpTypeReserveId: *hasResult = true; *hasResultType = false; break;

+    case OpTypeQueue: *hasResult = true; *hasResultType = false; break;

+    case OpTypePipe: *hasResult = true; *hasResultType = false; break;

+    case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;

+    case OpConstantTrue: *hasResult = true; *hasResultType = true; break;

+    case OpConstantFalse: *hasResult = true; *hasResultType = true; break;

+    case OpConstant: *hasResult = true; *hasResultType = true; break;

+    case OpConstantComposite: *hasResult = true; *hasResultType = true; break;

+    case OpConstantSampler: *hasResult = true; *hasResultType = true; break;

+    case OpConstantNull: *hasResult = true; *hasResultType = true; break;

+    case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;

+    case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;

+    case OpSpecConstant: *hasResult = true; *hasResultType = true; break;

+    case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;

+    case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break;

+    case OpFunction: *hasResult = true; *hasResultType = true; break;

+    case OpFunctionParameter: *hasResult = true; *hasResultType = true; break;

+    case OpFunctionEnd: *hasResult = false; *hasResultType = false; break;

+    case OpFunctionCall: *hasResult = true; *hasResultType = true; break;

+    case OpVariable: *hasResult = true; *hasResultType = true; break;

+    case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break;

+    case OpLoad: *hasResult = true; *hasResultType = true; break;

+    case OpStore: *hasResult = false; *hasResultType = false; break;

+    case OpCopyMemory: *hasResult = false; *hasResultType = false; break;

+    case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break;

+    case OpAccessChain: *hasResult = true; *hasResultType = true; break;

+    case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;

+    case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break;

+    case OpArrayLength: *hasResult = true; *hasResultType = true; break;

+    case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;

+    case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;

+    case OpDecorate: *hasResult = false; *hasResultType = false; break;

+    case OpMemberDecorate: *hasResult = false; *hasResultType = false; break;

+    case OpDecorationGroup: *hasResult = true; *hasResultType = false; break;

+    case OpGroupDecorate: *hasResult = false; *hasResultType = false; break;

+    case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;

+    case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;

+    case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;

+    case OpVectorShuffle: *hasResult = true; *hasResultType = true; break;

+    case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break;

+    case OpCompositeExtract: *hasResult = true; *hasResultType = true; break;

+    case OpCompositeInsert: *hasResult = true; *hasResultType = true; break;

+    case OpCopyObject: *hasResult = true; *hasResultType = true; break;

+    case OpTranspose: *hasResult = true; *hasResultType = true; break;

+    case OpSampledImage: *hasResult = true; *hasResultType = true; break;

+    case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageFetch: *hasResult = true; *hasResultType = true; break;

+    case OpImageGather: *hasResult = true; *hasResultType = true; break;

+    case OpImageDrefGather: *hasResult = true; *hasResultType = true; break;

+    case OpImageRead: *hasResult = true; *hasResultType = true; break;

+    case OpImageWrite: *hasResult = false; *hasResultType = false; break;

+    case OpImage: *hasResult = true; *hasResultType = true; break;

+    case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break;

+    case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break;

+    case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageQuerySize: *hasResult = true; *hasResultType = true; break;

+    case OpImageQueryLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break;

+    case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break;

+    case OpConvertFToU: *hasResult = true; *hasResultType = true; break;

+    case OpConvertFToS: *hasResult = true; *hasResultType = true; break;

+    case OpConvertSToF: *hasResult = true; *hasResultType = true; break;

+    case OpConvertUToF: *hasResult = true; *hasResultType = true; break;

+    case OpUConvert: *hasResult = true; *hasResultType = true; break;

+    case OpSConvert: *hasResult = true; *hasResultType = true; break;

+    case OpFConvert: *hasResult = true; *hasResultType = true; break;

+    case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break;

+    case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break;

+    case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break;

+    case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break;

+    case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break;

+    case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;

+    case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;

+    case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;

+    case OpBitcast: *hasResult = true; *hasResultType = true; break;

+    case OpSNegate: *hasResult = true; *hasResultType = true; break;

+    case OpFNegate: *hasResult = true; *hasResultType = true; break;

+    case OpIAdd: *hasResult = true; *hasResultType = true; break;

+    case OpFAdd: *hasResult = true; *hasResultType = true; break;

+    case OpISub: *hasResult = true; *hasResultType = true; break;

+    case OpFSub: *hasResult = true; *hasResultType = true; break;

+    case OpIMul: *hasResult = true; *hasResultType = true; break;

+    case OpFMul: *hasResult = true; *hasResultType = true; break;

+    case OpUDiv: *hasResult = true; *hasResultType = true; break;

+    case OpSDiv: *hasResult = true; *hasResultType = true; break;

+    case OpFDiv: *hasResult = true; *hasResultType = true; break;

+    case OpUMod: *hasResult = true; *hasResultType = true; break;

+    case OpSRem: *hasResult = true; *hasResultType = true; break;

+    case OpSMod: *hasResult = true; *hasResultType = true; break;

+    case OpFRem: *hasResult = true; *hasResultType = true; break;

+    case OpFMod: *hasResult = true; *hasResultType = true; break;

+    case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;

+    case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;

+    case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;

+    case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;

+    case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;

+    case OpOuterProduct: *hasResult = true; *hasResultType = true; break;

+    case OpDot: *hasResult = true; *hasResultType = true; break;

+    case OpIAddCarry: *hasResult = true; *hasResultType = true; break;

+    case OpISubBorrow: *hasResult = true; *hasResultType = true; break;

+    case OpUMulExtended: *hasResult = true; *hasResultType = true; break;

+    case OpSMulExtended: *hasResult = true; *hasResultType = true; break;

+    case OpAny: *hasResult = true; *hasResultType = true; break;

+    case OpAll: *hasResult = true; *hasResultType = true; break;

+    case OpIsNan: *hasResult = true; *hasResultType = true; break;

+    case OpIsInf: *hasResult = true; *hasResultType = true; break;

+    case OpIsFinite: *hasResult = true; *hasResultType = true; break;

+    case OpIsNormal: *hasResult = true; *hasResultType = true; break;

+    case OpSignBitSet: *hasResult = true; *hasResultType = true; break;

+    case OpLessOrGreater: *hasResult = true; *hasResultType = true; break;

+    case OpOrdered: *hasResult = true; *hasResultType = true; break;

+    case OpUnordered: *hasResult = true; *hasResultType = true; break;

+    case OpLogicalEqual: *hasResult = true; *hasResultType = true; break;

+    case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;

+    case OpLogicalOr: *hasResult = true; *hasResultType = true; break;

+    case OpLogicalAnd: *hasResult = true; *hasResultType = true; break;

+    case OpLogicalNot: *hasResult = true; *hasResultType = true; break;

+    case OpSelect: *hasResult = true; *hasResultType = true; break;

+    case OpIEqual: *hasResult = true; *hasResultType = true; break;

+    case OpINotEqual: *hasResult = true; *hasResultType = true; break;

+    case OpUGreaterThan: *hasResult = true; *hasResultType = true; break;

+    case OpSGreaterThan: *hasResult = true; *hasResultType = true; break;

+    case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;

+    case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;

+    case OpULessThan: *hasResult = true; *hasResultType = true; break;

+    case OpSLessThan: *hasResult = true; *hasResultType = true; break;

+    case OpULessThanEqual: *hasResult = true; *hasResultType = true; break;

+    case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break;

+    case OpFOrdEqual: *hasResult = true; *hasResultType = true; break;

+    case OpFUnordEqual: *hasResult = true; *hasResultType = true; break;

+    case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;

+    case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;

+    case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break;

+    case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break;

+    case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;

+    case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;

+    case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;

+    case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;

+    case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;

+    case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;

+    case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break;

+    case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;

+    case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;

+    case OpBitwiseOr: *hasResult = true; *hasResultType = true; break;

+    case OpBitwiseXor: *hasResult = true; *hasResultType = true; break;

+    case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break;

+    case OpNot: *hasResult = true; *hasResultType = true; break;

+    case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break;

+    case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;

+    case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;

+    case OpBitReverse: *hasResult = true; *hasResultType = true; break;

+    case OpBitCount: *hasResult = true; *hasResultType = true; break;

+    case OpDPdx: *hasResult = true; *hasResultType = true; break;

+    case OpDPdy: *hasResult = true; *hasResultType = true; break;

+    case OpFwidth: *hasResult = true; *hasResultType = true; break;

+    case OpDPdxFine: *hasResult = true; *hasResultType = true; break;

+    case OpDPdyFine: *hasResult = true; *hasResultType = true; break;

+    case OpFwidthFine: *hasResult = true; *hasResultType = true; break;

+    case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break;

+    case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break;

+    case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break;

+    case OpEmitVertex: *hasResult = false; *hasResultType = false; break;

+    case OpEndPrimitive: *hasResult = false; *hasResultType = false; break;

+    case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;

+    case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;

+    case OpControlBarrier: *hasResult = false; *hasResultType = false; break;

+    case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break;

+    case OpAtomicLoad: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicStore: *hasResult = false; *hasResultType = false; break;

+    case OpAtomicExchange: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicISub: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicSMin: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicUMin: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicSMax: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicUMax: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicAnd: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicOr: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicXor: *hasResult = true; *hasResultType = true; break;

+    case OpPhi: *hasResult = true; *hasResultType = true; break;

+    case OpLoopMerge: *hasResult = false; *hasResultType = false; break;

+    case OpSelectionMerge: *hasResult = false; *hasResultType = false; break;

+    case OpLabel: *hasResult = true; *hasResultType = false; break;

+    case OpBranch: *hasResult = false; *hasResultType = false; break;

+    case OpBranchConditional: *hasResult = false; *hasResultType = false; break;

+    case OpSwitch: *hasResult = false; *hasResultType = false; break;

+    case OpKill: *hasResult = false; *hasResultType = false; break;

+    case OpReturn: *hasResult = false; *hasResultType = false; break;

+    case OpReturnValue: *hasResult = false; *hasResultType = false; break;

+    case OpUnreachable: *hasResult = false; *hasResultType = false; break;

+    case OpLifetimeStart: *hasResult = false; *hasResultType = false; break;

+    case OpLifetimeStop: *hasResult = false; *hasResultType = false; break;

+    case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;

+    case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;

+    case OpGroupAll: *hasResult = true; *hasResultType = true; break;

+    case OpGroupAny: *hasResult = true; *hasResultType = true; break;

+    case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break;

+    case OpGroupIAdd: *hasResult = true; *hasResultType = true; break;

+    case OpGroupFAdd: *hasResult = true; *hasResultType = true; break;

+    case OpGroupFMin: *hasResult = true; *hasResultType = true; break;

+    case OpGroupUMin: *hasResult = true; *hasResultType = true; break;

+    case OpGroupSMin: *hasResult = true; *hasResultType = true; break;

+    case OpGroupFMax: *hasResult = true; *hasResultType = true; break;

+    case OpGroupUMax: *hasResult = true; *hasResultType = true; break;

+    case OpGroupSMax: *hasResult = true; *hasResultType = true; break;

+    case OpReadPipe: *hasResult = true; *hasResultType = true; break;

+    case OpWritePipe: *hasResult = true; *hasResultType = true; break;

+    case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break;

+    case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break;

+    case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;

+    case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;

+    case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break;

+    case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break;

+    case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break;

+    case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;

+    case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;

+    case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;

+    case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;

+    case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;

+    case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;

+    case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break;

+    case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break;

+    case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;

+    case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;

+    case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;

+    case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;

+    case OpRetainEvent: *hasResult = false; *hasResultType = false; break;

+    case OpReleaseEvent: *hasResult = false; *hasResultType = false; break;

+    case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break;

+    case OpIsValidEvent: *hasResult = true; *hasResultType = true; break;

+    case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;

+    case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;

+    case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;

+    case OpBuildNDRange: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseGather: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;

+    case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;

+    case OpNoLine: *hasResult = false; *hasResultType = false; break;

+    case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;

+    case OpImageSparseRead: *hasResult = true; *hasResultType = true; break;

+    case OpSizeOf: *hasResult = true; *hasResultType = true; break;

+    case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break;

+    case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;

+    case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;

+    case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;

+    case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;

+    case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;

+    case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;

+    case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;

+    case OpModuleProcessed: *hasResult = false; *hasResultType = false; break;

+    case OpExecutionModeId: *hasResult = false; *hasResultType = false; break;

+    case OpDecorateId: *hasResult = false; *hasResultType = false; break;

+    case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;

+    case OpCopyLogical: *hasResult = true; *hasResultType = true; break;

+    case OpPtrEqual: *hasResult = true; *hasResultType = true; break;

+    case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;

+    case OpPtrDiff: *hasResult = true; *hasResultType = true; break;

+    case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break;

+    case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupReadInvocationKHR: *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;

+    case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;

+    case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;

+    case OpSDot: *hasResult = true; *hasResultType = true; break;

+    case OpUDot: *hasResult = true; *hasResultType = true; break;

+    case OpSUDot: *hasResult = true; *hasResultType = true; break;

+    case OpSDotAccSat: *hasResult = true; *hasResultType = true; break;

+    case OpUDotAccSat: *hasResult = true; *hasResultType = true; break;

+    case OpSUDotAccSat: *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;

+    case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break;

+    case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break;

+    case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionTypeKHR: *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;

+    case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;

+    case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;

+    case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;

+    case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;

+    case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;

+    case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;

+    case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;

+    case OpReadClockKHR: *hasResult = true; *hasResultType = true; break;

+    case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;

+    case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;

+    case OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break;

+    case OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break;

+    case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;

+    case OpReportIntersectionNV: *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 OpTypeAccelerationStructureNV: *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;

+    case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;

+    case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;

+    case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;

+    case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;

+    case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;

+    case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;

+    case OpIsHelperInvocationEXT: *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;

+    case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break;

+    case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;

+    case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;

+    case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;

+    case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;

+    case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;

+    case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;

+    case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;

+    case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;

+    case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpAsmINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break;

+    case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break;

+    case OpExpectKHR: *hasResult = true; *hasResultType = true; break;

+    case OpDecorateString: *hasResult = false; *hasResultType = false; break;

+    case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;

+    case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break;

+    case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;

+    case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;

+    case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;

+    case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;

+    case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break;

+    case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;

+    case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;

+    case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;

+    }

+}

+#endif /* SPV_ENABLE_UTILITY_CODE */

+

+// Overload operator| for mask bit combining

+

+inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }

+inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }

+inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }

+inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }

+inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }

+inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }

+inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }

+inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }

+inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); }

+inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); }

+

+}  // end namespace spv

+

+#endif  // #ifndef spirv_HPP

diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 486e80d..0969127 100644
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -111,27 +111,23 @@
 
     void addStringOperand(const char* str)
     {
-        unsigned int word;
-        char* wordString = (char*)&word;
-        char* wordPtr = wordString;
-        int charCount = 0;
+        unsigned int word = 0;
+        unsigned int shiftAmount = 0;
         char c;
+
         do {
             c = *(str++);
-            *(wordPtr++) = c;
-            ++charCount;
-            if (charCount == 4) {
+            word |= ((unsigned int)c) << shiftAmount;
+            shiftAmount += 8;
+            if (shiftAmount == 32) {
                 addImmediateOperand(word);
-                wordPtr = wordString;
-                charCount = 0;
+                word = 0;
+                shiftAmount = 0;
             }
         } while (c != 0);
 
         // deal with partial last word
-        if (charCount > 0) {
-            // pad with 0s
-            for (; charCount < 4; ++charCount)
-                *(wordPtr++) = 0;
+        if (shiftAmount > 0) {
             addImmediateOperand(word);
         }
     }
@@ -353,6 +349,7 @@
     const std::vector<Block*>& getBlocks() const { return blocks; }
     void addLocalVariable(std::unique_ptr<Instruction> inst);
     Id getReturnType() const { return functionInstruction.getTypeId(); }
+    Id getFuncId() const { return functionInstruction.getResultId(); }
     void setReturnPrecision(Decoration precision)
     {
         if (precision == DecorationRelaxedPrecision)
@@ -361,6 +358,14 @@
     Decoration getReturnPrecision() const
         { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; }
 
+    void setDebugLineInfo(Id fileName, int line, int column) {
+        lineInstruction = std::unique_ptr<Instruction>{new Instruction(OpLine)};
+        lineInstruction->addIdOperand(fileName);
+        lineInstruction->addImmediateOperand(line);
+        lineInstruction->addImmediateOperand(column);
+    }
+    bool hasDebugLineInfo() const { return lineInstruction != nullptr; }
+
     void setImplicitThis() { implicitThis = true; }
     bool hasImplicitThis() const { return implicitThis; }
 
@@ -377,6 +382,11 @@
 
     void dump(std::vector<unsigned int>& out) const
     {
+        // OpLine
+        if (lineInstruction != nullptr) {
+            lineInstruction->dump(out);
+        }
+        
         // OpFunction
         functionInstruction.dump(out);
 
@@ -395,6 +405,7 @@
     Function& operator=(Function&);
 
     Module& parent;
+    std::unique_ptr<Instruction> lineInstruction;
     Instruction functionInstruction;
     std::vector<Instruction*> parameterInstructions;
     std::vector<Block*> blocks;
@@ -461,7 +472,8 @@
 // - the OpFunction instruction
 // - all the OpFunctionParameter instructions
 __inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent)
-    : parent(parent), functionInstruction(id, resultType, OpFunction), implicitThis(false),
+    : parent(parent), lineInstruction(nullptr),
+      functionInstruction(id, resultType, OpFunction), implicitThis(false),
       reducedPrecisionReturn(false)
 {
     // OpFunction
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index 2b163e7..d54a1df 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -104,24 +104,48 @@
 endif()
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS glslangValidator EXPORT glslangValidatorTargets
-            RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-    install(EXPORT glslangValidatorTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    install(TARGETS glslangValidator EXPORT glslang-targets)
+
+    # Backward compatibility
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslangValidatorTargets.cmake" "
+        message(WARNING \"Using `glslangValidatorTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
+
+        if (NOT TARGET glslang::glslangValidator)
+            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/glslang-targets.cmake\")
+        endif()
+
+        add_library(glslangValidator ALIAS glslang::glslangValidator)
+    ")
+    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslangValidatorTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 
     if(ENABLE_SPVREMAPPER)
-        install(TARGETS spirv-remap EXPORT spirv-remapTargets
-            RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-        install(EXPORT spirv-remapTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+        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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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)
     endif()
 
-    if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets
-                ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-    else()
-        install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets
-                ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-    endif()
-    install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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/StandAlone/ResourceLimits.cpp b/StandAlone/ResourceLimits.cpp
index 7c7f4c4..1a76bf6 100644
--- a/StandAlone/ResourceLimits.cpp
+++ b/StandAlone/ResourceLimits.cpp
@@ -134,6 +134,15 @@
     /* .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,
 
     /* .limits = */ {
@@ -244,6 +253,15 @@
             << "MaxTaskWorkGroupSizeY_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"
             << "MaxTaskWorkGroupSizeZ_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"
             << "MaxMeshViewCountNV "                        << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"
+            << "MaxMeshOutputVerticesEXT "                  << DefaultTBuiltInResource.maxMeshOutputVerticesEXT << "\n"
+            << "MaxMeshOutputPrimitivesEXT "                << DefaultTBuiltInResource.maxMeshOutputPrimitivesEXT << "\n"
+            << "MaxMeshWorkGroupSizeX_EXT "                 << DefaultTBuiltInResource.maxMeshWorkGroupSizeX_EXT << "\n"
+            << "MaxMeshWorkGroupSizeY_EXT "                 << DefaultTBuiltInResource.maxMeshWorkGroupSizeY_EXT << "\n"
+            << "MaxMeshWorkGroupSizeZ_EXT "                 << DefaultTBuiltInResource.maxMeshWorkGroupSizeZ_EXT << "\n"
+            << "MaxTaskWorkGroupSizeX_EXT "                 << DefaultTBuiltInResource.maxTaskWorkGroupSizeX_EXT << "\n"
+            << "MaxTaskWorkGroupSizeY_EXT "                 << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_EXT << "\n"
+            << "MaxTaskWorkGroupSizeZ_EXT "                 << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_EXT << "\n"
+            << "MaxMeshViewCountEXT "                       << DefaultTBuiltInResource.maxMeshViewCountEXT << "\n"
             << "MaxDualSourceDrawBuffersEXT "               << DefaultTBuiltInResource.maxDualSourceDrawBuffersEXT << "\n"
             << "nonInductiveForLoops "                      << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"
             << "whileLoops "                                << DefaultTBuiltInResource.limits.whileLoops << "\n"
@@ -469,6 +487,24 @@
             resources->maxTaskWorkGroupSizeZ_NV = value;
         else if (tokenStr == "MaxMeshViewCountNV")
             resources->maxMeshViewCountNV = value;
+        else if (tokenStr == "MaxMeshOutputVerticesEXT")
+            resources->maxMeshOutputVerticesEXT = value;
+        else if (tokenStr == "MaxMeshOutputPrimitivesEXT")
+            resources->maxMeshOutputPrimitivesEXT = value;
+        else if (tokenStr == "MaxMeshWorkGroupSizeX_EXT")
+            resources->maxMeshWorkGroupSizeX_EXT = value;
+        else if (tokenStr == "MaxMeshWorkGroupSizeY_EXT")
+            resources->maxMeshWorkGroupSizeY_EXT = value;
+        else if (tokenStr == "MaxMeshWorkGroupSizeZ_EXT")
+            resources->maxMeshWorkGroupSizeZ_EXT = value;
+        else if (tokenStr == "MaxTaskWorkGroupSizeX_EXT")
+            resources->maxTaskWorkGroupSizeX_EXT = value;
+        else if (tokenStr == "MaxTaskWorkGroupSizeY_EXT")
+            resources->maxTaskWorkGroupSizeY_EXT = value;
+        else if (tokenStr == "MaxTaskWorkGroupSizeZ_EXT")
+            resources->maxTaskWorkGroupSizeZ_EXT = value;
+        else if (tokenStr == "MaxMeshViewCountEXT")
+            resources->maxMeshViewCountEXT = value;
         else if (tokenStr == "nonInductiveForLoops")
             resources->limits.nonInductiveForLoops = (value != 0);
         else if (tokenStr == "whileLoops")
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 23e510c..edde81e 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -113,6 +113,8 @@
 bool SpvToolsValidate = false;
 bool NaNClamp = false;
 bool stripDebugInfo = false;
+bool emitNonSemanticShaderDebugInfo = false;
+bool emitNonSemanticShaderDebugSource = false;
 bool beQuiet = false;
 bool VulkanRulesRelaxed = false;
 bool autoSampledTextures = false;
@@ -177,6 +179,8 @@
 const char* variableName = nullptr;
 bool HlslEnable16BitTypes = false;
 bool HlslDX9compatible = false;
+bool HlslDxPositionW = false;
+bool EnhancedMsgs = false;
 bool DumpBuiltinSymbols = false;
 std::vector<std::string> IncludeDirectoryList;
 
@@ -190,6 +194,9 @@
 glslang::EShTargetLanguage TargetLanguage = glslang::EShTargetNone;
 glslang::EShTargetLanguageVersion TargetVersion;     // not valid until TargetLanguage is set
 
+// GLSL version
+int GlslVersion = 0; // GLSL version specified on CLI, overrides #version in shader source
+
 std::vector<std::string> Processes;                     // what should be recorded by OpModuleProcessed, or equivalent
 
 // Per descriptor-set binding base data
@@ -288,8 +295,8 @@
         case EShLangClosestHit:      name = "rchit.spv";   break;
         case EShLangMiss:            name = "rmiss.spv";   break;
         case EShLangCallable:        name = "rcall.spv";   break;
-        case EShLangMeshNV:          name = "mesh.spv";    break;
-        case EShLangTaskNV:          name = "task.spv";    break;
+        case EShLangMesh :           name = "mesh.spv";    break;
+        case EShLangTask :           name = "task.spv";    break;
         default:                     name = "unknown";     break;
         }
     } else
@@ -652,6 +659,48 @@
                                lowerword == "flatten-uniform-array"  ||
                                lowerword == "fua") {
                         Options |= EOptionFlattenUniformArrays;
+                    } else if (lowerword == "glsl-version") {
+                        if (argc > 1) {
+                            if (strcmp(argv[1], "100") == 0) {
+                                GlslVersion = 100;
+                            } else if (strcmp(argv[1], "110") == 0) {
+                                GlslVersion = 110;
+                            } else if (strcmp(argv[1], "120") == 0) {
+                                GlslVersion = 120;
+                            } else if (strcmp(argv[1], "130") == 0) {
+                                GlslVersion = 130;
+                            } else if (strcmp(argv[1], "140") == 0) {
+                                GlslVersion = 140;
+                            } else if (strcmp(argv[1], "150") == 0) {
+                                GlslVersion = 150;
+                            } else if (strcmp(argv[1], "300es") == 0) {
+                                GlslVersion = 300;
+                            } else if (strcmp(argv[1], "310es") == 0) {
+                                GlslVersion = 310;
+                            } else if (strcmp(argv[1], "320es") == 0) {
+                                GlslVersion = 320;
+                            } else if (strcmp(argv[1], "330") == 0) {
+                                GlslVersion = 330;
+                            } else if (strcmp(argv[1], "400") == 0) {
+                                GlslVersion = 400;
+                            } else if (strcmp(argv[1], "410") == 0) {
+                                GlslVersion = 410;
+                            } else if (strcmp(argv[1], "420") == 0) {
+                                GlslVersion = 420;
+                            } else if (strcmp(argv[1], "430") == 0) {
+                                GlslVersion = 430;
+                            } else if (strcmp(argv[1], "440") == 0) {
+                                GlslVersion = 440;
+                            } else if (strcmp(argv[1], "450") == 0) {
+                                GlslVersion = 450;
+                            } else if (strcmp(argv[1], "460") == 0) {
+                                GlslVersion = 460;
+                            } else
+                                Error("--glsl-version expected one of: 100, 110, 120, 130, 140, 150,\n"
+                                      "300es, 310es, 320es, 330\n"
+                                      "400, 410, 420, 430, 440, 450, 460");
+                        }
+                        bumpArg();
                     } else if (lowerword == "hlsl-offsets") {
                         Options |= EOptionHlslOffsets;
                     } else if (lowerword == "hlsl-iomap" ||
@@ -662,6 +711,10 @@
                         HlslEnable16BitTypes = true;
                     } else if (lowerword == "hlsl-dx9-compatible") {
                         HlslDX9compatible = true;
+                    } else if (lowerword == "hlsl-dx-position-w") {
+                        HlslDxPositionW = true;
+                    } else if (lowerword == "enhanced-msgs") {
+                        EnhancedMsgs = true;
                     } else if (lowerword == "auto-sampled-textures") { 
                         autoSampledTextures = true;
                     } else if (lowerword == "invert-y" ||  // synonyms
@@ -764,6 +817,9 @@
                             } else if (strcmp(argv[1], "vulkan1.2") == 0) {
                                 setVulkanSpv();
                                 ClientVersion = glslang::EShTargetVulkan_1_2;
+                            } else if (strcmp(argv[1], "vulkan1.3") == 0) {
+                                setVulkanSpv();
+                                ClientVersion = glslang::EShTargetVulkan_1_3;
                             } else if (strcmp(argv[1], "opengl") == 0) {
                                 setOpenGlSpv();
                                 ClientVersion = glslang::EShTargetOpenGL_450;
@@ -785,9 +841,13 @@
                             } else if (strcmp(argv[1], "spirv1.5") == 0) {
                                 TargetLanguage = glslang::EShTargetSpv;
                                 TargetVersion = glslang::EShTargetSpv_1_5;
+                            } else if (strcmp(argv[1], "spirv1.6") == 0) {
+                                TargetLanguage = glslang::EShTargetSpv;
+                                TargetVersion = glslang::EShTargetSpv_1_6;
                             } else
-                                Error("--target-env expected one of: vulkan1.0, vulkan1.1, vulkan1.2, opengl,\n"
-                                      "spirv1.0, spirv1.1, spirv1.2, spirv1.3, spirv1.4, or spirv1.5");
+                                Error("--target-env expected one of: vulkan1.0, vulkan1.1, vulkan1.2,\n"
+                                      "vulkan1.3, opengl, spirv1.0, spirv1.1, spirv1.2, spirv1.3,\n"
+                                      "spirv1.4, spirv1.5 or spirv1.6");
                         }
                         bumpArg();
                     } else if (lowerword == "undef-macro" ||
@@ -911,11 +971,21 @@
             case 'g':
                 // Override previous -g or -g0 argument
                 stripDebugInfo = false;
+                emitNonSemanticShaderDebugInfo = false;
                 Options &= ~EOptionDebug;
                 if (argv[0][2] == '0')
                     stripDebugInfo = true;
-                else
+                else {
                     Options |= EOptionDebug;
+                    if (argv[0][2] == 'V') {
+                        emitNonSemanticShaderDebugInfo = true;
+                        if (argv[0][3] == 'S') {
+                            emitNonSemanticShaderDebugSource = true;
+                        } else {
+                            emitNonSemanticShaderDebugSource = false;
+                        }
+                    }
+                }
                 break;
             case 'h':
                 usage();
@@ -1012,6 +1082,10 @@
             TargetLanguage = glslang::EShTargetSpv;
             TargetVersion = glslang::EShTargetSpv_1_5;
             break;
+        case glslang::EShTargetVulkan_1_3:
+            TargetLanguage = glslang::EShTargetSpv;
+            TargetVersion = glslang::EShTargetSpv_1_6;
+            break;
         case glslang::EShTargetOpenGL_450:
             TargetLanguage = glslang::EShTargetSpv;
             TargetVersion = glslang::EShTargetSpv_1_0;
@@ -1059,6 +1133,8 @@
         messages = (EShMessages)(messages | EShMsgHlslDX9Compatible);
     if (DumpBuiltinSymbols)
         messages = (EShMessages)(messages | EShMsgBuiltinSymbolTable);
+    if (EnhancedMsgs)
+        messages = (EShMessages)(messages | EShMsgEnhanced);
 }
 
 //
@@ -1149,6 +1225,27 @@
     }
 };
 
+// Writes a string into a depfile, escaping some special characters following the Makefile rules.
+static void writeEscapedDepString(std::ofstream& file, const std::string& str)
+{
+    for (char c : str) {
+        switch (c) {
+        case ' ':
+        case ':':
+        case '#':
+        case '[':
+        case ']':
+        case '\\':
+            file << '\\';
+            break;
+        case '$':
+            file << '$';
+            break;
+        }
+        file << c;
+    }
+}
+
 // Writes a depfile similar to gcc -MMD foo.c
 bool writeDepFile(std::string depfile, std::vector<std::string>& binaryFiles, const std::vector<std::string>& sources)
 {
@@ -1156,10 +1253,12 @@
     if (file.fail())
         return false;
 
-    for (auto it = binaryFiles.begin(); it != binaryFiles.end(); it++) {
-        file << *it << ":";
-        for (auto it = sources.begin(); it != sources.end(); it++) {
-            file << " " << *it;
+    for (auto binaryFile = binaryFiles.begin(); binaryFile != binaryFiles.end(); binaryFile++) {
+        writeEscapedDepString(file, *binaryFile);
+        file << ":";
+        for (auto sourceFile = sources.begin(); sourceFile != sources.end(); sourceFile++) {
+            file << " ";
+            writeEscapedDepString(file, *sourceFile);
         }
         file << std::endl;
     }
@@ -1209,6 +1308,8 @@
             shader->setSourceEntryPoint(sourceEntryPointName);
         }
 
+        shader->setOverrideVersion(GlslVersion);
+
         std::string intrinsicString = getIntrinsic(compUnit.text, compUnit.count);
 
         PreambleString = "";
@@ -1284,6 +1385,15 @@
         if (Options & EOptionInvertY)
             shader->setInvertY(true);
 
+        if (HlslDxPositionW)
+            shader->setDxPositionW(true);
+
+        if (EnhancedMsgs)
+            shader->setEnhancedMsgs();
+
+        if (emitNonSemanticShaderDebugInfo)
+            shader->setDebugInfo(true);
+
         // Set up the environment, some subsettings take precedence over earlier
         // ways of setting things.
         if (Options & EOptionSpv) {
@@ -1375,9 +1485,15 @@
                     std::vector<unsigned int> spirv;
                     spv::SpvBuildLogger logger;
                     glslang::SpvOptions spvOptions;
-                    if (Options & EOptionDebug)
+                    if (Options & EOptionDebug) {
                         spvOptions.generateDebugInfo = true;
-                    else if (stripDebugInfo)
+                        if (emitNonSemanticShaderDebugInfo) {
+                            spvOptions.emitNonSemanticShaderDebugInfo = true;
+                            if (emitNonSemanticShaderDebugSource) {
+                                spvOptions.emitNonSemanticShaderDebugSource = true;
+                            }
+                        }
+                    } else if (stripDebugInfo)
                         spvOptions.stripDebugInfo = true;
                     spvOptions.disableOptimizer = (Options & EOptionOptimizeDisable) != 0;
                     spvOptions.optimizeSize = (Options & EOptionOptimizeSize) != 0;
@@ -1685,9 +1801,9 @@
     else if (stageName == "rcall")
         return EShLangCallable;
     else if (stageName == "mesh")
-        return EShLangMeshNV;
+        return EShLangMesh;
     else if (stageName == "task")
-        return EShLangTaskNV;
+        return EShLangTask;
 
     usage();
     return EShLangVertex;
@@ -1811,6 +1927,8 @@
            "              SPV_GOOGLE_hlsl_functionality1 extension\n"
            "  -g          generate debug information\n"
            "  -g0         strip debug information\n"
+           "  -gV         generate nonsemantic shader debug information\n"
+           "  -gVS        generate nonsemantic shader debug information with source\n"
            "  -h          print this usage message\n"
            "  -i          intermediate tree (glslang AST) is printed out\n"
            "  -l          link all input files together to form a single module\n"
@@ -1840,6 +1958,11 @@
            "  -dumpfullversion | -dumpversion   print bare major.minor.patchlevel\n"
            "  --flatten-uniform-arrays | --fua  flatten uniform texture/sampler arrays to\n"
            "                                    scalars\n"
+           "  --glsl-version {100 | 110 | 120 | 130 | 140 | 150 |\n"
+           "                300es | 310es | 320es | 330\n"
+           "                400 | 410 | 420 | 430 | 440 | 450 | 460}\n"
+           "                                    set GLSL version, overrides #version\n"
+           "                                    in shader sourcen\n"
            "  --hlsl-offsets                    allow block offsets to follow HLSL rules\n"
            "                                    works independently of source language\n"
            "  --hlsl-iomap                      perform IO mapping in HLSL register space\n"
@@ -1847,7 +1970,10 @@
            "  --hlsl-dx9-compatible             interprets sampler declarations as a\n"
            "                                    texture/sampler combo like DirectX9 would,\n"
            "                                    and recognizes DirectX9-specific semantics\n"
+           "  --hlsl-dx-position-w              W component of SV_Position in HLSL fragment\n"
+           "                                    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"
            "  --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"
@@ -1922,8 +2048,9 @@
            "  --sep                             synonym for --source-entrypoint\n"
            "  --stdin                           read from stdin instead of from a file;\n"
            "                                    requires providing the shader stage using -S\n"
-           "  --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | opengl | \n"
-           "                spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 | spirv1.5}\n"
+           "  --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | vulkan1.3 | opengl |\n"
+           "                spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 |\n"
+           "                spirv1.5 | spirv1.6}\n"
            "                                    Set the execution environment that the\n"
            "                                    generated code will be executed in.\n"
            "                                    Defaults to:\n"
@@ -1932,6 +2059,7 @@
            "                                     * spirv1.0  under --target-env vulkan1.0\n"
            "                                     * spirv1.3  under --target-env vulkan1.1\n"
            "                                     * spirv1.5  under --target-env vulkan1.2\n"
+           "                                     * spirv1.6  under --target-env vulkan1.3\n"
            "                                    Multiple --target-env can be specified.\n"
            "  --variable-name <name>\n"
            "  --vn <name>                       creates a C header file that contains a\n"
diff --git a/StandAlone/spirv-remap.cpp b/StandAlone/spirv-remap.cpp
index 48878c3..15c3ac5 100644
--- a/StandAlone/spirv-remap.cpp
+++ b/StandAlone/spirv-remap.cpp
@@ -105,6 +105,32 @@
         }
     }
 
+    // Read strings from a file
+    void read(std::vector<std::string>& strings, const std::string& inFilename, int verbosity)
+    {
+        std::ifstream fp;
+
+        if (verbosity > 0)
+            logHandler(std::string("  reading: ") + inFilename);
+
+        strings.clear();
+        fp.open(inFilename, std::fstream::in);
+
+        if (fp.fail())
+            errHandler("error opening file for read: ");
+
+        std::string line;
+        while (std::getline(fp, line))
+        {
+            // Ignore empty lines and lines starting with the comment marker '#'.
+            if (line.length() == 0 || line[0] == '#') {
+                continue;
+            }
+
+            strings.push_back(line);
+        }
+    }
+
     void write(std::vector<SpvWord>& spv, const std::string& outFile, int verbosity)
     {
         if (outFile.empty())
@@ -144,6 +170,7 @@
             << " [--dce (all|types|funcs)]"
             << " [--opt (all|loadstore)]"
             << " [--strip-all | --strip all | -s]"
+            << " [--strip-white-list]"
             << " [--do-everything]"
             << " --input | -i file1 [file2...] --output|-o DESTDIR"
             << std::endl;
@@ -156,16 +183,18 @@
 
     // grind through each SPIR in turn
     void execute(const std::vector<std::string>& inputFile, const std::string& outputDir,
-        int opts, int verbosity)
+                 const std::string& whiteListFile, int opts, int verbosity)
     {
+        std::vector<std::string> whiteListStrings;
+        if(!whiteListFile.empty())
+            read(whiteListStrings, whiteListFile, verbosity);
+
         for (auto it = inputFile.cbegin(); it != inputFile.cend(); ++it) {
             const std::string &filename = *it;
             std::vector<SpvWord> spv;
             read(spv, filename, verbosity);
-            spv::spirvbin_t(verbosity).remap(spv, opts);
-
+            spv::spirvbin_t(verbosity).remap(spv, whiteListStrings, opts);
             const std::string outfile = outputDir + path_sep_char() + basename(filename);
-
             write(spv, outfile, verbosity);
         }
 
@@ -176,6 +205,7 @@
     // Parse command line options
     void parseCmdLine(int argc, char** argv, std::vector<std::string>& inputFile,
         std::string& outputDir,
+        std::string& stripWhiteListFile,
         int& options,
         int& verbosity)
     {
@@ -245,6 +275,9 @@
                     options = options | spv::spirvbin_t::STRIP;
                     ++a;
                 }
+            } else if (arg == "--strip-white-list") {
+                ++a;
+                stripWhiteListFile = argv[a++];
             } else if (arg == "--dce") {
                 // Parse comma (or colon, etc) separated list of things to dce
                 ++a;
@@ -315,6 +348,7 @@
 {
     std::vector<std::string> inputFile;
     std::string              outputDir;
+    std::string              whiteListFile;
     int                      opts;
     int                      verbosity;
 
@@ -329,13 +363,13 @@
     if (argc < 2)
         usage(argv[0]);
 
-    parseCmdLine(argc, argv, inputFile, outputDir, opts, verbosity);
+    parseCmdLine(argc, argv, inputFile, outputDir, whiteListFile, opts, verbosity);
 
     if (outputDir.empty())
         usage(argv[0], "Output directory required");
 
     // Main operations: read, remap, and write.
-    execute(inputFile, outputDir, opts, verbosity);
+    execute(inputFile, outputDir, whiteListFile, opts, verbosity);
 
     // If we get here, everything went OK!  Nothing more to be done.
 }
diff --git a/Test/150.frag b/Test/150.frag
index 228e4f0..90b1e27 100644
--- a/Test/150.frag
+++ b/Test/150.frag
@@ -111,8 +111,8 @@
     vec2 pf2;

     vec3 pf3;

 

-    lod = textureQueryLod(samp1D, pf);      // ERROR, extension GL_ARB_texture_query_lod needed

-    lod = textureQueryLod(samp2Ds, pf2);    // ERROR, extension GL_ARB_texture_query_lod needed

+    lod = textureQueryLOD(samp1D, pf);      // ERROR, extension GL_ARB_texture_query_lod needed

+    lod = textureQueryLOD(samp2Ds, pf2);    // ERROR, extension GL_ARB_texture_query_lod needed

 }

 

 #extension GL_ARB_texture_query_lod : enable

@@ -138,21 +138,21 @@
     vec2 pf2;

     vec3 pf3;

 

-    lod = textureQueryLod(samp1D, pf);

-    lod = textureQueryLod(isamp2D, pf2);

-    lod = textureQueryLod(usamp3D, pf3);

-    lod = textureQueryLod(sampCube, pf3);

-    lod = textureQueryLod(isamp1DA, pf);

-    lod = textureQueryLod(usamp2DA, pf2);

+    lod = textureQueryLOD(samp1D, pf);

+    lod = textureQueryLOD(isamp2D, pf2);

+    lod = textureQueryLOD(usamp3D, pf3);

+    lod = textureQueryLOD(sampCube, pf3);

+    lod = textureQueryLOD(isamp1DA, pf);

+    lod = textureQueryLOD(usamp2DA, pf2);

 

-    lod = textureQueryLod(samp1Ds, pf);

-    lod = textureQueryLod(samp2Ds, pf2);

-    lod = textureQueryLod(sampCubes, pf3);

-    lod = textureQueryLod(samp1DAs, pf);

-    lod = textureQueryLod(samp2DAs, pf2);

+    lod = textureQueryLOD(samp1Ds, pf);

+    lod = textureQueryLOD(samp2Ds, pf2);

+    lod = textureQueryLOD(sampCubes, pf3);

+    lod = textureQueryLOD(samp1DAs, pf);

+    lod = textureQueryLOD(samp2DAs, pf2);

 

-    lod = textureQueryLod(sampBuf, pf);     // ERROR

-    lod = textureQueryLod(sampRect, pf2);   // ERROR

+    lod = textureQueryLOD(sampBuf, pf);     // ERROR

+    lod = textureQueryLOD(sampRect, pf2);   // ERROR

 }

 

 // Test extension GL_EXT_shader_integer_mix

diff --git a/Test/BestMatchFunction.vert b/Test/BestMatchFunction.vert
new file mode 100644
index 0000000..eb09233
--- /dev/null
+++ b/Test/BestMatchFunction.vert
@@ -0,0 +1,20 @@
+#version 150
+#extension GL_ARB_gpu_shader5 : require
+
+uniform ivec4 u1;
+uniform uvec4 u2;
+out     vec4  result;
+vec4 f(in vec4 a, in vec4 b){ return a * b;}           // choice 1
+vec4 f(in uvec4 a, in uvec4 b){ return vec4(a - b);}   // choice 2
+
+void main()
+{
+    result = f(u1, u2); // should match choice 2. which have less implicit conversion. 
+    switch (gl_VertexID)
+    {
+      case 0: gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); break;
+      case 1: gl_Position = vec4( 1.0, 1.0, 0.0, 1.0); break;
+      case 2: gl_Position = vec4(-1.0,-1.0, 0.0, 1.0); break;
+      case 3: gl_Position = vec4( 1.0,-1.0, 0.0, 1.0); break;
+    }
+}
diff --git a/Test/EndStreamPrimitive.geom b/Test/EndStreamPrimitive.geom
new file mode 100644
index 0000000..a654ebc
--- /dev/null
+++ b/Test/EndStreamPrimitive.geom
@@ -0,0 +1,20 @@
+#version 150 core
+#extension GL_ARB_gpu_shader5 : require
+layout(points) in;
+layout(points, max_vertices = 1) out;
+layout(stream=0) out float output1;
+layout(stream=0) out float output2;
+layout(stream=1) out float output3;
+layout(stream=1) out float output4;
+uniform uint stream;
+void main() {
+
+    output1 = 1.0;
+    output2 = 2.0;
+    EmitStreamVertex(0);
+    EndStreamPrimitive(0);
+    output3 = 3.0;
+    output4 = 4.0;
+    EmitStreamVertex(1);
+    EndStreamPrimitive(1);
+}
\ No newline at end of file
diff --git a/Test/GL_ARB_fragment_coord_conventions.vert b/Test/GL_ARB_fragment_coord_conventions.vert
new file mode 100644
index 0000000..962734f
--- /dev/null
+++ b/Test/GL_ARB_fragment_coord_conventions.vert
@@ -0,0 +1,27 @@
+#version 140
+
+#extension GL_ARB_fragment_coord_conventions: require
+#extension GL_ARB_explicit_attrib_location : enable
+
+
+#if !defined GL_ARB_fragment_coord_conventions
+#  error GL_ARB_fragment_coord_conventions is not defined
+#elif GL_ARB_fragment_coord_conventions != 1
+#  error GL_ARB_fragment_coord_conventions is not equal to 1
+#endif
+
+
+layout (location = 0) in vec4 pos;
+out vec4 i;
+
+uniform float gtf_windowWidth;
+uniform float gtf_windowHeight;
+uniform float n;
+uniform float f;
+
+void main()
+{
+  gl_Position = pos;
+  i = vec4((pos.x+1.0)*0.5*gtf_windowWidth, (pos.y+1.0)*0.5*gtf_windowHeight, (f-n)*0.5*pos.z + (f+n)*0.5, pos.w);
+}
+
diff --git a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
index 2afdb10..100f6d7 100644
--- a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
@@ -1,6 +1,6 @@
 hlsl.aliasOpaque.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
index 7bb33e6..be1637f 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
@@ -1,6 +1,6 @@
 hlsl.flattenOpaque.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 190
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
index 0e8583f..18d7694 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
@@ -1,6 +1,6 @@
 hlsl.flattenOpaqueInit.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 139
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
index fe858ef..914d9b5 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -1,6 +1,6 @@
 hlsl.flattenOpaqueInitMix.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
index 0edf712..2be41f0 100644
--- a/Test/baseLegalResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
@@ -1,24 +1,22 @@
 hlsl.flattenSubset.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 67
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 47 50
+                              EntryPoint Fragment 4  "main" 50
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
                               Name 21  "samp"
                               Name 33  "tex"
-                              Name 47  "vpos"
                               Name 50  "@entryPointOutput"
                               Decorate 21(samp) DescriptorSet 0
                               Decorate 21(samp) Binding 0
                               Decorate 33(tex) DescriptorSet 0
                               Decorate 33(tex) Binding 1
-                              Decorate 47(vpos) Location 0
                               Decorate 50(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
@@ -34,8 +32,6 @@
               39:             TypeVector 6(float) 2
               40:    6(float) Constant 1056964608
               41:   39(fvec2) ConstantComposite 40 40
-              46:             TypePointer Input 7(fvec4)
-        47(vpos):     46(ptr) Variable Input
               49:             TypePointer Output 7(fvec4)
 50(@entryPointOutput):     49(ptr) Variable Output
          4(main):           2 Function None 3
diff --git a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
index 00bd55b..656ff73 100644
--- a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
@@ -1,18 +1,16 @@
 hlsl.flattenSubset2.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 53
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 49 52
+                              EntryPoint Fragment 4  "main" 52
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
-                              Name 49  "vpos"
                               Name 52  "@entryPointOutput"
-                              Decorate 49(vpos) Location 0
                               Decorate 52(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
@@ -20,8 +18,6 @@
                7:             TypeVector 6(float) 4
               43:    6(float) Constant 0
               44:    7(fvec4) ConstantComposite 43 43 43 43
-              48:             TypePointer Input 7(fvec4)
-        49(vpos):     48(ptr) Variable Input
               51:             TypePointer Output 7(fvec4)
 52(@entryPointOutput):     51(ptr) Variable Output
          4(main):           2 Function None 3
diff --git a/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out
index 564f0f4..936df71 100644
--- a/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out
+++ b/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out
@@ -1,6 +1,6 @@
 hlsl.intrinsics.evalfns.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 274
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
index f45a768..b664098 100644
--- a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
+++ b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
@@ -1,6 +1,6 @@
 hlsl.partialFlattenLocal.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 164
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
index 8975ed2..8f3ac26 100644
--- a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
+++ b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
@@ -1,6 +1,6 @@
 hlsl.partialFlattenMixed.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out
index 2192e14..ba15b5c 100644
--- a/Test/baseResults/150.frag.out
+++ b/Test/baseResults/150.frag.out
@@ -2,22 +2,23 @@
 ERROR: 0:4: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord
 ERROR: 0:5: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord
 ERROR: 0:6: 'layout qualifier' : can only apply origin_upper_left and pixel_center_origin to gl_FragCoord 
-ERROR: 0:14: 'gl_FragCoord' : cannot redeclare after use 
 ERROR: 0:50: 'gl_PerFragment' : undeclared identifier 
 ERROR: 0:53: 'double' : Reserved word. 
 ERROR: 0:53: 'double' : not supported for this version or the enabled extensions 
 ERROR: 0:53: 'double' : must be qualified as flat in
 ERROR: 0:57: '=' :  cannot convert from ' global double' to ' global int'
-ERROR: 0:80: 'floatBitsToInt' : required extension not requested: GL_ARB_shader_bit_encoding
+ERROR: 0:80: 'floatBitsToInt' : required extension not requested: Possible extensions include:
+GL_ARB_shader_bit_encoding
+GL_ARB_gpu_shader5
 ERROR: 0:100: 'packSnorm2x16' : required extension not requested: GL_ARB_shading_language_packing
-ERROR: 0:114: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod
-ERROR: 0:115: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod
-ERROR: 0:154: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:114: 'textureQueryLOD' : required extension not requested: GL_ARB_texture_query_lod
+ERROR: 0:115: 'textureQueryLOD' : required extension not requested: GL_ARB_texture_query_lod
+ERROR: 0:154: 'textureQueryLOD' : no matching overloaded function found 
 ERROR: 0:154: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
-ERROR: 0:155: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:155: 'textureQueryLOD' : no matching overloaded function found 
 ERROR: 0:155: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
 ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix
-ERROR: 18 compilation errors.  No code generated.
+ERROR: 17 compilation errors.  No code generated.
 
 
 Shader version: 150
diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out
index 92b8e1a..c5a31f5 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: 'EmitStreamVertex' : no matching overloaded function found 
-ERROR: 0:30: 'EndStreamPrimitive' : no matching overloaded function found 
+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: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 
@@ -49,10 +49,12 @@
 0:27    Sequence
 0:27      EmitVertex ( global void)
 0:28      EndPrimitive ( global void)
-0:29      Constant:
-0:29        0.000000
-0:30      Constant:
-0:30        0.000000
+0:29      EmitStreamVertex ( global void)
+0:29        Constant:
+0:29          1 (const int)
+0:30      EndStreamPrimitive ( global void)
+0:30        Constant:
+0:30          0 (const int)
 0:32      move second child to first child ( temp 3-component vector of float)
 0:32        color: direct index for structure (layout( stream=0) out 3-component vector of float)
 0:32          'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})
@@ -190,10 +192,12 @@
 0:27    Sequence
 0:27      EmitVertex ( global void)
 0:28      EndPrimitive ( global void)
-0:29      Constant:
-0:29        0.000000
-0:30      Constant:
-0:30        0.000000
+0:29      EmitStreamVertex ( global void)
+0:29        Constant:
+0:29          1 (const int)
+0:30      EndStreamPrimitive ( global void)
+0:30        Constant:
+0:30          0 (const int)
 0:32      move second child to first child ( temp 3-component vector of float)
 0:32        color: direct index for structure (layout( stream=0) out 3-component vector of float)
 0:32          'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})
diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out
index 535a8a6..78b32da 100644
--- a/Test/baseResults/150.tesc.out
+++ b/Test/baseResults/150.tesc.out
@@ -627,7 +627,7 @@
 ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out
 ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a
 ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb
-ERROR: 0:26: 'gl_PointSize' : no such field in structure 
+ERROR: 0:26: 'gl_PointSize' : no such field in structure 'gl_out'
 ERROR: 0:26: 'assign' :  cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}'
 ERROR: 0:29: 'out' : type must be an array: outf
 ERROR: 0:43: 'vertices' : must be greater than 0 
@@ -940,8 +940,9 @@
     main(
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
-ERROR: Linking tessellation control stage: Types must match:
-    outa: " global 4-element array of int" versus " global 1-element array of int"
+ERROR: Linking tessellation control and tessellation control stages: Array sizes must be compatible:
+    tessellation control stage: " int outa[4]"
+    tessellation control stage: " int outa[1]"
 ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
@@ -951,8 +952,9 @@
     foo(
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
-ERROR: Linking tessellation control stage: Types must match:
-    gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance}" versus " out 3-element array of block{ out 4-component vector of float Position gl_Position}"
+ERROR: Linking tessellation control and tessellation control stages: tessellation control block member has no corresponding member in tessellation control block:
+    tessellation control stage: Block: gl_PerVertex, Member: gl_PointSize
+    tessellation control stage: Block: gl_PerVertex, Member: n/a 
 
 Linked tessellation evaluation stage:
 
diff --git a/Test/baseResults/310.geom.out b/Test/baseResults/310.geom.out
index b0dabc3..2fa5d11 100644
--- a/Test/baseResults/310.geom.out
+++ b/Test/baseResults/310.geom.out
@@ -6,7 +6,7 @@
 ERROR: 0:44: 'EndStreamPrimitive' : no matching overloaded function found 
 ERROR: 0:47: 'gl_ClipDistance' : undeclared identifier 
 ERROR: 0:47: 'gl_ClipDistance' :  left of '[' is not of type array, matrix, or vector  
-ERROR: 0:48: 'gl_ClipDistance' : no such field in structure 
+ERROR: 0:48: 'gl_ClipDistance' : no such field in structure 'gl_in'
 ERROR: 0:48: 'expression' :  left of '[' is not of type array, matrix, or vector  
 ERROR: 0:47: 'assign' :  l-value required (can't modify a const)
 ERROR: 0:55: 'selecting output stream' : not supported with this profile: es
diff --git a/Test/baseResults/310.tesc.out b/Test/baseResults/310.tesc.out
index 25ce6ee..bd4c1bd 100644
--- a/Test/baseResults/310.tesc.out
+++ b/Test/baseResults/310.tesc.out
@@ -6,12 +6,12 @@
 ERROR: 0:26: 'gl_PointSize' : required extension not requested: Possible extensions include:
 GL_EXT_tessellation_point_size
 GL_OES_tessellation_point_size
-ERROR: 0:27: 'gl_ClipDistance' : no such field in structure 
+ERROR: 0:27: 'gl_ClipDistance' : no such field in structure 'gl_in'
 ERROR: 0:27: 'expression' :  left of '[' is not of type array, matrix, or vector  
 ERROR: 0:34: 'gl_PointSize' : required extension not requested: Possible extensions include:
 GL_EXT_tessellation_point_size
 GL_OES_tessellation_point_size
-ERROR: 0:35: 'gl_ClipDistance' : no such field in structure 
+ERROR: 0:35: 'gl_ClipDistance' : no such field in structure 'gl_out'
 ERROR: 0:35: 'expression' :  left of '[' is not of type array, matrix, or vector  
 ERROR: 0:35: 'assign' :  l-value required (can't modify a const)
 ERROR: 0:41: '' : tessellation control barrier() cannot be placed within flow control 
diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out
index 2f23d9b..5eecaff 100644
--- a/Test/baseResults/310.tese.out
+++ b/Test/baseResults/310.tese.out
@@ -10,7 +10,7 @@
 ERROR: 0:37: 'gl_PointSize' : required extension not requested: Possible extensions include:
 GL_EXT_tessellation_point_size
 GL_OES_tessellation_point_size
-ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 
+ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 'gl_in'
 ERROR: 0:38: 'expression' :  left of '[' is not of type array, matrix, or vector  
 ERROR: 0:47: 'gl_PointSize' : required extension not requested: Possible extensions include:
 GL_EXT_tessellation_point_size
@@ -43,7 +43,7 @@
 ERROR: 0:103: 'location' : overlapping use of location 24
 ERROR: 0:105: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved 
 ERROR: 0:113: 'sample' : Reserved word. 
-ERROR: 0:119: 'gl_PointSize' : no such field in structure 
+ERROR: 0:119: 'gl_PointSize' : no such field in structure 'gl_in'
 ERROR: 0:119: '=' :  cannot convert from ' temp block{ in highp 4-component vector of float Position gl_Position}' to ' temp highp float'
 ERROR: 0:127: 'gl_BoundingBoxOES' : undeclared identifier 
 ERROR: 43 compilation errors.  No code generated.
diff --git a/Test/baseResults/320.geom.out b/Test/baseResults/320.geom.out
index f333766..cdaacb9 100644
--- a/Test/baseResults/320.geom.out
+++ b/Test/baseResults/320.geom.out
@@ -6,7 +6,7 @@
 ERROR: 0:34: 'EndStreamPrimitive' : no matching overloaded function found 
 ERROR: 0:37: 'gl_ClipDistance' : undeclared identifier 
 ERROR: 0:37: 'gl_ClipDistance' :  left of '[' is not of type array, matrix, or vector  
-ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 
+ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 'gl_in'
 ERROR: 0:38: 'expression' :  left of '[' is not of type array, matrix, or vector  
 ERROR: 0:37: 'assign' :  l-value required (can't modify a const)
 ERROR: 0:45: 'selecting output stream' : not supported with this profile: es
diff --git a/Test/baseResults/320.tesc.out b/Test/baseResults/320.tesc.out
index 6bb52b3..67848d9 100644
--- a/Test/baseResults/320.tesc.out
+++ b/Test/baseResults/320.tesc.out
@@ -6,12 +6,12 @@
 ERROR: 0:24: 'gl_PointSize' : required extension not requested: Possible extensions include:
 GL_EXT_tessellation_point_size
 GL_OES_tessellation_point_size
-ERROR: 0:25: 'gl_ClipDistance' : no such field in structure 
+ERROR: 0:25: 'gl_ClipDistance' : no such field in structure 'gl_in'
 ERROR: 0:25: 'expression' :  left of '[' is not of type array, matrix, or vector  
 ERROR: 0:32: 'gl_PointSize' : required extension not requested: Possible extensions include:
 GL_EXT_tessellation_point_size
 GL_OES_tessellation_point_size
-ERROR: 0:33: 'gl_ClipDistance' : no such field in structure 
+ERROR: 0:33: 'gl_ClipDistance' : no such field in structure 'gl_out'
 ERROR: 0:33: 'expression' :  left of '[' is not of type array, matrix, or vector  
 ERROR: 0:33: 'assign' :  l-value required (can't modify a const)
 ERROR: 0:39: '' : tessellation control barrier() cannot be placed within flow control 
diff --git a/Test/baseResults/320.tese.out b/Test/baseResults/320.tese.out
index 014eeb0..ba51b9c 100644
--- a/Test/baseResults/320.tese.out
+++ b/Test/baseResults/320.tese.out
@@ -10,7 +10,7 @@
 ERROR: 0:33: 'gl_PointSize' : required extension not requested: Possible extensions include:
 GL_EXT_tessellation_point_size
 GL_OES_tessellation_point_size
-ERROR: 0:34: 'gl_ClipDistance' : no such field in structure 
+ERROR: 0:34: 'gl_ClipDistance' : no such field in structure 'gl_in'
 ERROR: 0:34: 'expression' :  left of '[' is not of type array, matrix, or vector  
 ERROR: 0:43: 'gl_PointSize' : required extension not requested: Possible extensions include:
 GL_EXT_tessellation_point_size
diff --git a/Test/baseResults/410.geom.out b/Test/baseResults/410.geom.out
index 498da5a..3cc7900 100644
--- a/Test/baseResults/410.geom.out
+++ b/Test/baseResults/410.geom.out
@@ -2,7 +2,7 @@
 ERROR: 0:8: 'myIn' : cannot redeclare a built-in block with a user name 
 ERROR: 0:12: 'gl_myIn' : no declaration found for redeclaration 
 ERROR: 0:20: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
-ERROR: 0:32: 'gl_Position' : no such field in structure 
+ERROR: 0:32: 'gl_Position' : no such field in structure 'gl_in'
 ERROR: 0:32: '=' :  cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float'
 ERROR: 0:33: 'gl_Position' : member of nameless block was not redeclared 
 ERROR: 0:33: 'assign' :  l-value required "gl_PerVertex" (can't modify void)
diff --git a/Test/baseResults/420.tesc.out b/Test/baseResults/420.tesc.out
index a1f881c..4410c84 100644
--- a/Test/baseResults/420.tesc.out
+++ b/Test/baseResults/420.tesc.out
@@ -2,7 +2,7 @@
 ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out
 ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a
 ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb
-ERROR: 0:26: 'gl_PointSize' : no such field in structure 
+ERROR: 0:26: 'gl_PointSize' : no such field in structure 'gl_out'
 ERROR: 0:26: 'assign' :  cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}'
 ERROR: 0:29: 'out' : type must be an array: outf
 ERROR: 0:43: 'vertices' : must be greater than 0 
diff --git a/Test/baseResults/450.geom.out b/Test/baseResults/450.geom.out
index e75bf93..b51a674 100644
--- a/Test/baseResults/450.geom.out
+++ b/Test/baseResults/450.geom.out
@@ -1,6 +1,6 @@
 450.geom
 ERROR: 0:15: '[' :  array index out of range '3'
-ERROR: 0:15: 'gl_Position' : no such field in structure 
+ERROR: 0:15: 'gl_Position' : no such field in structure 'gl_in'
 ERROR: 0:19: 'points' : can only apply to a standalone qualifier 
 ERROR: 3 compilation errors.  No code generated.
 
diff --git a/Test/baseResults/BestMatchFunction.vert.out b/Test/baseResults/BestMatchFunction.vert.out
new file mode 100644
index 0000000..843ffd7
--- /dev/null
+++ b/Test/baseResults/BestMatchFunction.vert.out
@@ -0,0 +1,206 @@
+BestMatchFunction.vert
+WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
+
+Shader version: 150
+Requested GL_ARB_gpu_shader5
+0:? Sequence
+0:7  Function Definition: f(vf4;vf4; ( global 4-component vector of float)
+0:7    Function Parameters: 
+0:7      'a' ( in 4-component vector of float)
+0:7      'b' ( in 4-component vector of float)
+0:7    Sequence
+0:7      Branch: Return with expression
+0:7        component-wise multiply ( temp 4-component vector of float)
+0:7          'a' ( in 4-component vector of float)
+0:7          'b' ( in 4-component vector of float)
+0:8  Function Definition: f(vu4;vu4; ( global 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'a' ( in 4-component vector of uint)
+0:8      'b' ( in 4-component vector of uint)
+0:8    Sequence
+0:8      Branch: Return with expression
+0:8        Convert uint to float ( temp 4-component vector of float)
+0:8          subtract ( temp 4-component vector of uint)
+0:8            'a' ( in 4-component vector of uint)
+0:8            'b' ( in 4-component vector of uint)
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp 4-component vector of float)
+0:12        'result' ( smooth out 4-component vector of float)
+0:12        Function Call: f(vu4;vu4; ( global 4-component vector of float)
+0:12          Convert int to uint ( temp 4-component vector of uint)
+0:12            'u1' ( uniform 4-component vector of int)
+0:12          'u2' ( uniform 4-component vector of uint)
+0:13      switch
+0:13      condition
+0:13        'gl_VertexID' ( gl_VertexId int VertexId)
+0:13      body
+0:13        Sequence
+0:15          case:  with expression
+0:15            Constant:
+0:15              0 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp 4-component vector of float)
+0:15              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:15                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              Constant:
+0:15                -1.000000
+0:15                1.000000
+0:15                0.000000
+0:15                1.000000
+0:15            Branch: Break
+0:16          case:  with expression
+0:16            Constant:
+0:16              1 (const int)
+0:?           Sequence
+0:16            move second child to first child ( temp 4-component vector of float)
+0:16              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:16                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              Constant:
+0:16                1.000000
+0:16                1.000000
+0:16                0.000000
+0:16                1.000000
+0:16            Branch: Break
+0:17          case:  with expression
+0:17            Constant:
+0:17              2 (const int)
+0:?           Sequence
+0:17            move second child to first child ( temp 4-component vector of float)
+0:17              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:17                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              Constant:
+0:17                -1.000000
+0:17                -1.000000
+0:17                0.000000
+0:17                1.000000
+0:17            Branch: Break
+0:18          case:  with expression
+0:18            Constant:
+0:18              3 (const int)
+0:?           Sequence
+0:18            move second child to first child ( temp 4-component vector of float)
+0:18              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:18                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:18                Constant:
+0:18                  0 (const uint)
+0:18              Constant:
+0:18                1.000000
+0:18                -1.000000
+0:18                0.000000
+0:18                1.000000
+0:18            Branch: Break
+0:?   Linker Objects
+0:?     'u1' ( uniform 4-component vector of int)
+0:?     'u2' ( uniform 4-component vector of uint)
+0:?     'result' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 150
+Requested GL_ARB_gpu_shader5
+0:? Sequence
+0:8  Function Definition: f(vu4;vu4; ( global 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'a' ( in 4-component vector of uint)
+0:8      'b' ( in 4-component vector of uint)
+0:8    Sequence
+0:8      Branch: Return with expression
+0:8        Convert uint to float ( temp 4-component vector of float)
+0:8          subtract ( temp 4-component vector of uint)
+0:8            'a' ( in 4-component vector of uint)
+0:8            'b' ( in 4-component vector of uint)
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp 4-component vector of float)
+0:12        'result' ( smooth out 4-component vector of float)
+0:12        Function Call: f(vu4;vu4; ( global 4-component vector of float)
+0:12          Convert int to uint ( temp 4-component vector of uint)
+0:12            'u1' ( uniform 4-component vector of int)
+0:12          'u2' ( uniform 4-component vector of uint)
+0:13      switch
+0:13      condition
+0:13        'gl_VertexID' ( gl_VertexId int VertexId)
+0:13      body
+0:13        Sequence
+0:15          case:  with expression
+0:15            Constant:
+0:15              0 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp 4-component vector of float)
+0:15              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:15                'anon@0' ( 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})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              Constant:
+0:15                -1.000000
+0:15                1.000000
+0:15                0.000000
+0:15                1.000000
+0:15            Branch: Break
+0:16          case:  with expression
+0:16            Constant:
+0:16              1 (const int)
+0:?           Sequence
+0:16            move second child to first child ( temp 4-component vector of float)
+0:16              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:16                'anon@0' ( 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})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              Constant:
+0:16                1.000000
+0:16                1.000000
+0:16                0.000000
+0:16                1.000000
+0:16            Branch: Break
+0:17          case:  with expression
+0:17            Constant:
+0:17              2 (const int)
+0:?           Sequence
+0:17            move second child to first child ( temp 4-component vector of float)
+0:17              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:17                'anon@0' ( 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})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              Constant:
+0:17                -1.000000
+0:17                -1.000000
+0:17                0.000000
+0:17                1.000000
+0:17            Branch: Break
+0:18          case:  with expression
+0:18            Constant:
+0:18              3 (const int)
+0:?           Sequence
+0:18            move second child to first child ( temp 4-component vector of float)
+0:18              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:18                'anon@0' ( 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})
+0:18                Constant:
+0:18                  0 (const uint)
+0:18              Constant:
+0:18                1.000000
+0:18                -1.000000
+0:18                0.000000
+0:18                1.000000
+0:18            Branch: Break
+0:?   Linker Objects
+0:?     'u1' ( uniform 4-component vector of int)
+0:?     'u2' ( uniform 4-component vector of uint)
+0:?     'result' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/EndStreamPrimitive.geom.out b/Test/baseResults/EndStreamPrimitive.geom.out
new file mode 100644
index 0000000..702c3f9
--- /dev/null
+++ b/Test/baseResults/EndStreamPrimitive.geom.out
@@ -0,0 +1,97 @@
+EndStreamPrimitive.geom
+WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
+
+Shader version: 150
+Requested GL_ARB_gpu_shader5
+invocations = -1
+max_vertices = 1
+input primitive = points
+output primitive = points
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp float)
+0:12        'output1' (layout( stream=0) out float)
+0:12        Constant:
+0:12          1.000000
+0:13      move second child to first child ( temp float)
+0:13        'output2' (layout( stream=0) out float)
+0:13        Constant:
+0:13          2.000000
+0:14      EmitStreamVertex ( global void)
+0:14        Constant:
+0:14          0 (const int)
+0:15      EndStreamPrimitive ( global void)
+0:15        Constant:
+0:15          0 (const int)
+0:16      move second child to first child ( temp float)
+0:16        'output3' (layout( stream=1) out float)
+0:16        Constant:
+0:16          3.000000
+0:17      move second child to first child ( temp float)
+0:17        'output4' (layout( stream=1) out float)
+0:17        Constant:
+0:17          4.000000
+0:18      EmitStreamVertex ( global void)
+0:18        Constant:
+0:18          1 (const int)
+0:19      EndStreamPrimitive ( global void)
+0:19        Constant:
+0:19          1 (const int)
+0:?   Linker Objects
+0:?     'output1' (layout( stream=0) out float)
+0:?     'output2' (layout( stream=0) out float)
+0:?     'output3' (layout( stream=1) out float)
+0:?     'output4' (layout( stream=1) out float)
+0:?     'stream' ( uniform uint)
+
+
+Linked geometry stage:
+
+
+Shader version: 150
+Requested GL_ARB_gpu_shader5
+invocations = 1
+max_vertices = 1
+input primitive = points
+output primitive = points
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp float)
+0:12        'output1' (layout( stream=0) out float)
+0:12        Constant:
+0:12          1.000000
+0:13      move second child to first child ( temp float)
+0:13        'output2' (layout( stream=0) out float)
+0:13        Constant:
+0:13          2.000000
+0:14      EmitStreamVertex ( global void)
+0:14        Constant:
+0:14          0 (const int)
+0:15      EndStreamPrimitive ( global void)
+0:15        Constant:
+0:15          0 (const int)
+0:16      move second child to first child ( temp float)
+0:16        'output3' (layout( stream=1) out float)
+0:16        Constant:
+0:16          3.000000
+0:17      move second child to first child ( temp float)
+0:17        'output4' (layout( stream=1) out float)
+0:17        Constant:
+0:17          4.000000
+0:18      EmitStreamVertex ( global void)
+0:18        Constant:
+0:18          1 (const int)
+0:19      EndStreamPrimitive ( global void)
+0:19        Constant:
+0:19          1 (const int)
+0:?   Linker Objects
+0:?     'output1' (layout( stream=0) out float)
+0:?     'output2' (layout( stream=0) out float)
+0:?     'output3' (layout( stream=1) out float)
+0:?     'output4' (layout( stream=1) out float)
+0:?     'stream' ( uniform uint)
+
diff --git a/Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out b/Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out
new file mode 100644
index 0000000..3b55ae0
--- /dev/null
+++ b/Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out
@@ -0,0 +1,143 @@
+GL_ARB_fragment_coord_conventions.vert
+Shader version: 140
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_fragment_coord_conventions
+0:? Sequence
+0:22  Function Definition: main( ( global void)
+0:22    Function Parameters: 
+0:24    Sequence
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        'gl_Position' ( gl_Position 4-component vector of float Position)
+0:24        'pos' (layout( location=0) in 4-component vector of float)
+0:25      move second child to first child ( temp 4-component vector of float)
+0:25        'i' ( smooth out 4-component vector of float)
+0:25        Construct vec4 ( temp 4-component vector of float)
+0:25          component-wise multiply ( temp float)
+0:25            component-wise multiply ( temp float)
+0:25              add ( temp float)
+0:25                direct index ( temp float)
+0:25                  'pos' (layout( location=0) in 4-component vector of float)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25                Constant:
+0:25                  1.000000
+0:25              Constant:
+0:25                0.500000
+0:25            'gtf_windowWidth' ( uniform float)
+0:25          component-wise multiply ( temp float)
+0:25            component-wise multiply ( temp float)
+0:25              add ( temp float)
+0:25                direct index ( temp float)
+0:25                  'pos' (layout( location=0) in 4-component vector of float)
+0:25                  Constant:
+0:25                    1 (const int)
+0:25                Constant:
+0:25                  1.000000
+0:25              Constant:
+0:25                0.500000
+0:25            'gtf_windowHeight' ( uniform float)
+0:25          add ( temp float)
+0:25            component-wise multiply ( temp float)
+0:25              component-wise multiply ( temp float)
+0:25                subtract ( temp float)
+0:25                  'f' ( uniform float)
+0:25                  'n' ( uniform float)
+0:25                Constant:
+0:25                  0.500000
+0:25              direct index ( temp float)
+0:25                'pos' (layout( location=0) in 4-component vector of float)
+0:25                Constant:
+0:25                  2 (const int)
+0:25            component-wise multiply ( temp float)
+0:25              add ( temp float)
+0:25                'f' ( uniform float)
+0:25                'n' ( uniform float)
+0:25              Constant:
+0:25                0.500000
+0:25          direct index ( temp float)
+0:25            'pos' (layout( location=0) in 4-component vector of float)
+0:25            Constant:
+0:25              3 (const int)
+0:?   Linker Objects
+0:?     'pos' (layout( location=0) in 4-component vector of float)
+0:?     'i' ( smooth out 4-component vector of float)
+0:?     'gtf_windowWidth' ( uniform float)
+0:?     'gtf_windowHeight' ( uniform float)
+0:?     'n' ( uniform float)
+0:?     'f' ( uniform float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 140
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_fragment_coord_conventions
+0:? Sequence
+0:22  Function Definition: main( ( global void)
+0:22    Function Parameters: 
+0:24    Sequence
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        'gl_Position' ( gl_Position 4-component vector of float Position)
+0:24        'pos' (layout( location=0) in 4-component vector of float)
+0:25      move second child to first child ( temp 4-component vector of float)
+0:25        'i' ( smooth out 4-component vector of float)
+0:25        Construct vec4 ( temp 4-component vector of float)
+0:25          component-wise multiply ( temp float)
+0:25            component-wise multiply ( temp float)
+0:25              add ( temp float)
+0:25                direct index ( temp float)
+0:25                  'pos' (layout( location=0) in 4-component vector of float)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25                Constant:
+0:25                  1.000000
+0:25              Constant:
+0:25                0.500000
+0:25            'gtf_windowWidth' ( uniform float)
+0:25          component-wise multiply ( temp float)
+0:25            component-wise multiply ( temp float)
+0:25              add ( temp float)
+0:25                direct index ( temp float)
+0:25                  'pos' (layout( location=0) in 4-component vector of float)
+0:25                  Constant:
+0:25                    1 (const int)
+0:25                Constant:
+0:25                  1.000000
+0:25              Constant:
+0:25                0.500000
+0:25            'gtf_windowHeight' ( uniform float)
+0:25          add ( temp float)
+0:25            component-wise multiply ( temp float)
+0:25              component-wise multiply ( temp float)
+0:25                subtract ( temp float)
+0:25                  'f' ( uniform float)
+0:25                  'n' ( uniform float)
+0:25                Constant:
+0:25                  0.500000
+0:25              direct index ( temp float)
+0:25                'pos' (layout( location=0) in 4-component vector of float)
+0:25                Constant:
+0:25                  2 (const int)
+0:25            component-wise multiply ( temp float)
+0:25              add ( temp float)
+0:25                'f' ( uniform float)
+0:25                'n' ( uniform float)
+0:25              Constant:
+0:25                0.500000
+0:25          direct index ( temp float)
+0:25            'pos' (layout( location=0) in 4-component vector of float)
+0:25            Constant:
+0:25              3 (const int)
+0:?   Linker Objects
+0:?     'pos' (layout( location=0) in 4-component vector of float)
+0:?     'i' ( smooth out 4-component vector of float)
+0:?     'gtf_windowWidth' ( uniform float)
+0:?     'gtf_windowHeight' ( uniform float)
+0:?     'n' ( uniform float)
+0:?     'f' ( uniform float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/compoundsuffix.frag.hlsl b/Test/baseResults/compoundsuffix.frag.hlsl
index 5a62488..f8dcfaa 100644
--- a/Test/baseResults/compoundsuffix.frag.hlsl
+++ b/Test/baseResults/compoundsuffix.frag.hlsl
@@ -1,45 +1,45 @@
-compoundsuffix.frag.hlsl

-// Module Version 10000

-// Generated by (magic number): 8000a

-// Id's are bound by 22

-

-                              Capability Shader

-               1:             ExtInstImport  "GLSL.std.450"

-                              MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main" 20

-                              ExecutionMode 4 OriginUpperLeft

-                              Source HLSL 500

-                              Name 4  "main"

-                              Name 11  "@main(vf4;"

-                              Name 10  "fragColor"

-                              Name 15  "fragColor"

-                              Name 16  "param"

-                              Name 20  "fragColor"

-                              Decorate 20(fragColor) Location 0

-               2:             TypeVoid

-               3:             TypeFunction 2

-               6:             TypeFloat 32

-               7:             TypeVector 6(float) 4

-               8:             TypePointer Function 7(fvec4)

-               9:             TypeFunction 2 8(ptr)

-              13:    6(float) Constant 1065353216

-              14:    7(fvec4) ConstantComposite 13 13 13 13

-              19:             TypePointer Output 7(fvec4)

-   20(fragColor):     19(ptr) Variable Output

-         4(main):           2 Function None 3

-               5:             Label

-   15(fragColor):      8(ptr) Variable Function

-       16(param):      8(ptr) Variable Function

-              17:           2 FunctionCall 11(@main(vf4;) 16(param)

-              18:    7(fvec4) Load 16(param)

-                              Store 15(fragColor) 18

-              21:    7(fvec4) Load 15(fragColor)

-                              Store 20(fragColor) 21

-                              Return

-                              FunctionEnd

-  11(@main(vf4;):           2 Function None 9

-   10(fragColor):      8(ptr) FunctionParameter

-              12:             Label

-                              Store 10(fragColor) 14

-                              Return

-                              FunctionEnd

+compoundsuffix.frag.hlsl
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 22
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 20
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "fragColor"
+                              Name 15  "fragColor"
+                              Name 16  "param"
+                              Name 20  "fragColor"
+                              Decorate 20(fragColor) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 2 8(ptr)
+              13:    6(float) Constant 1065353216
+              14:    7(fvec4) ConstantComposite 13 13 13 13
+              19:             TypePointer Output 7(fvec4)
+   20(fragColor):     19(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+   15(fragColor):      8(ptr) Variable Function
+       16(param):      8(ptr) Variable Function
+              17:           2 FunctionCall 11(@main(vf4;) 16(param)
+              18:    7(fvec4) Load 16(param)
+                              Store 15(fragColor) 18
+              21:    7(fvec4) Load 15(fragColor)
+                              Store 20(fragColor) 21
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):           2 Function None 9
+   10(fragColor):      8(ptr) FunctionParameter
+              12:             Label
+                              Store 10(fragColor) 14
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/compoundsuffix.vert.glsl b/Test/baseResults/compoundsuffix.vert.glsl
index 58354a4..8535b47 100644
--- a/Test/baseResults/compoundsuffix.vert.glsl
+++ b/Test/baseResults/compoundsuffix.vert.glsl
@@ -1,15 +1,15 @@
-compoundsuffix.vert.glsl

-Shader version: 100

-0:? Sequence

-0:1  Function Definition: main( ( global void)

-0:1    Function Parameters: 

-0:3    Sequence

-0:3      move second child to first child ( temp highp 4-component vector of float)

-0:3        'gl_Position' ( gl_Position highp 4-component vector of float Position)

-0:3        Constant:

-0:3          1.000000

-0:3          1.000000

-0:3          1.000000

-0:3          1.000000

-0:?   Linker Objects

-

+compoundsuffix.vert.glsl
+Shader version: 100
+0:? Sequence
+0:1  Function Definition: main( ( global void)
+0:1    Function Parameters: 
+0:3    Sequence
+0:3      move second child to first child ( temp highp 4-component vector of float)
+0:3        'gl_Position' ( gl_Position highp 4-component vector of float Position)
+0:3        Constant:
+0:3          1.000000
+0:3          1.000000
+0:3          1.000000
+0:3          1.000000
+0:?   Linker Objects
+
diff --git a/Test/baseResults/constantUnaryConversion.comp.out b/Test/baseResults/constantUnaryConversion.comp.out
index fcaf6f2..78372f0 100644
--- a/Test/baseResults/constantUnaryConversion.comp.out
+++ b/Test/baseResults/constantUnaryConversion.comp.out
@@ -3,8 +3,8 @@
 Requested GL_EXT_shader_explicit_arithmetic_types
 local_size = (1, 1, 1)
 0:? Sequence
-0:48  Function Definition: main( ( global void)
-0:48    Function Parameters: 
+0:69  Function Definition: main( ( global void)
+0:69    Function Parameters: 
 0:?   Linker Objects
 0:?     'bool_init' ( const bool)
 0:?       true (const bool)
@@ -29,6 +29,12 @@
 0:?     'float32_t_init' ( const float)
 0:?       13.000000
 0:?     'float64_t_init' ( const double)
+0:?       4.000000
+0:?     'neg_float16_t_init' ( const float16_t)
+0:?       -42.000000
+0:?     'neg_float32_t_init' ( const float)
+0:?       -13.000000
+0:?     'neg_float64_t_init' ( const double)
 0:?       -4.000000
 0:?     'bool_to_bool' ( const bool)
 0:?       true (const bool)
@@ -77,7 +83,7 @@
 0:?     'float32_t_to_int8_t' ( const int8_t)
 0:?       13 (const int8_t)
 0:?     'float64_t_to_int8_t' ( const int8_t)
-0:?       -4 (const int8_t)
+0:?       4 (const int8_t)
 0:?     'bool_to_int16_t' ( const int16_t)
 0:?       1 (const int16_t)
 0:?     'int8_t_to_int16_t' ( const int16_t)
@@ -101,7 +107,7 @@
 0:?     'float32_t_to_int16_t' ( const int16_t)
 0:?       13 (const int16_t)
 0:?     'float64_t_to_int16_t' ( const int16_t)
-0:?       -4 (const int16_t)
+0:?       4 (const int16_t)
 0:?     'bool_to_int32_t' ( const int)
 0:?       1 (const int)
 0:?     'int8_t_to_int32_t' ( const int)
@@ -125,7 +131,7 @@
 0:?     'float32_t_to_int32_t' ( const int)
 0:?       13 (const int)
 0:?     'float64_t_to_int32_t' ( const int)
-0:?       -4 (const int)
+0:?       4 (const int)
 0:?     'bool_to_int64_t' ( const int64_t)
 0:?       1 (const int64_t)
 0:?     'int8_t_to_int64_t' ( const int64_t)
@@ -149,7 +155,7 @@
 0:?     'float32_t_to_int64_t' ( const int64_t)
 0:?       13 (const int64_t)
 0:?     'float64_t_to_int64_t' ( const int64_t)
-0:?       -4 (const int64_t)
+0:?       4 (const int64_t)
 0:?     'bool_to_uint8_t' ( const uint8_t)
 0:?       1 (const uint8_t)
 0:?     'int8_t_to_uint8_t' ( const uint8_t)
@@ -173,7 +179,7 @@
 0:?     'float32_t_to_uint8_t' ( const uint8_t)
 0:?       13 (const uint8_t)
 0:?     'float64_t_to_uint8_t' ( const uint8_t)
-0:?       252 (const uint8_t)
+0:?       4 (const uint8_t)
 0:?     'bool_to_uint16_t' ( const uint16_t)
 0:?       1 (const uint16_t)
 0:?     'int8_t_to_uint16_t' ( const uint16_t)
@@ -197,7 +203,7 @@
 0:?     'float32_t_to_uint16_t' ( const uint16_t)
 0:?       13 (const uint16_t)
 0:?     'float64_t_to_uint16_t' ( const uint16_t)
-0:?       65532 (const uint16_t)
+0:?       4 (const uint16_t)
 0:?     'bool_to_uint32_t' ( const uint)
 0:?       1 (const uint)
 0:?     'int8_t_to_uint32_t' ( const uint)
@@ -221,7 +227,7 @@
 0:?     'float32_t_to_uint32_t' ( const uint)
 0:?       13 (const uint)
 0:?     'float64_t_to_uint32_t' ( const uint)
-0:?       4294967292 (const uint)
+0:?       4 (const uint)
 0:?     'bool_to_uint64_t' ( const uint64_t)
 0:?       1 (const uint64_t)
 0:?     'int8_t_to_uint64_t' ( const uint64_t)
@@ -245,7 +251,7 @@
 0:?     'float32_t_to_uint64_t' ( const uint64_t)
 0:?       13 (const uint64_t)
 0:?     'float64_t_to_uint64_t' ( const uint64_t)
-0:?       18446744073709551612 (const uint64_t)
+0:?       4 (const uint64_t)
 0:?     'bool_to_float16_t' ( const float16_t)
 0:?       1.000000
 0:?     'int8_t_to_float16_t' ( const float16_t)
@@ -269,7 +275,7 @@
 0:?     'float32_t_to_float16_t' ( const float16_t)
 0:?       13.000000
 0:?     'float64_t_to_float16_t' ( const float16_t)
-0:?       -4.000000
+0:?       4.000000
 0:?     'bool_to_float32_t' ( const float)
 0:?       1.000000
 0:?     'int8_t_to_float32_t' ( const float)
@@ -293,7 +299,7 @@
 0:?     'float32_t_to_float32_t' ( const float)
 0:?       13.000000
 0:?     'float64_t_to_float32_t' ( const float)
-0:?       -4.000000
+0:?       4.000000
 0:?     'bool_to_float64_t' ( const double)
 0:?       1.000000
 0:?     'int8_t_to_float64_t' ( const double)
@@ -317,6 +323,54 @@
 0:?     'float32_t_to_float64_t' ( const double)
 0:?       13.000000
 0:?     'float64_t_to_float64_t' ( const double)
+0:?       4.000000
+0:?     'neg_float16_t_to_bool' ( const bool)
+0:?       true (const bool)
+0:?     'neg_float32_t_to_bool' ( const bool)
+0:?       true (const bool)
+0:?     'neg_float64_t_to_bool' ( const bool)
+0:?       true (const bool)
+0:?     'neg_float16_t_to_int8_t' ( const int8_t)
+0:?       -42 (const int8_t)
+0:?     'neg_float32_t_to_int8_t' ( const int8_t)
+0:?       -13 (const int8_t)
+0:?     'neg_float64_t_to_int8_t' ( const int8_t)
+0:?       -4 (const int8_t)
+0:?     'neg_float16_t_to_int16_t' ( const int16_t)
+0:?       -42 (const int16_t)
+0:?     'neg_float32_t_to_int16_t' ( const int16_t)
+0:?       -13 (const int16_t)
+0:?     'neg_float64_t_to_int16_t' ( const int16_t)
+0:?       -4 (const int16_t)
+0:?     'neg_float16_t_to_int32_t' ( const int)
+0:?       -42 (const int)
+0:?     'neg_float32_t_to_int32_t' ( const int)
+0:?       -13 (const int)
+0:?     'neg_float64_t_to_int32_t' ( const int)
+0:?       -4 (const int)
+0:?     'neg_float16_t_to_int64_t' ( const int64_t)
+0:?       -42 (const int64_t)
+0:?     'neg_float32_t_to_int64_t' ( const int64_t)
+0:?       -13 (const int64_t)
+0:?     'neg_float64_t_to_int64_t' ( const int64_t)
+0:?       -4 (const int64_t)
+0:?     'neg_float16_t_to_float16_t' ( const float16_t)
+0:?       -42.000000
+0:?     'neg_float32_t_to_float16_t' ( const float16_t)
+0:?       -13.000000
+0:?     'neg_float64_t_to_float16_t' ( const float16_t)
+0:?       -4.000000
+0:?     'neg_float16_t_to_float32_t' ( const float)
+0:?       -42.000000
+0:?     'neg_float32_t_to_float32_t' ( const float)
+0:?       -13.000000
+0:?     'neg_float64_t_to_float32_t' ( const float)
+0:?       -4.000000
+0:?     'neg_float16_t_to_float64_t' ( const double)
+0:?       -42.000000
+0:?     'neg_float32_t_to_float64_t' ( const double)
+0:?       -13.000000
+0:?     'neg_float64_t_to_float64_t' ( const double)
 0:?       -4.000000
 
 
@@ -327,8 +381,8 @@
 Requested GL_EXT_shader_explicit_arithmetic_types
 local_size = (1, 1, 1)
 0:? Sequence
-0:48  Function Definition: main( ( global void)
-0:48    Function Parameters: 
+0:69  Function Definition: main( ( global void)
+0:69    Function Parameters: 
 0:?   Linker Objects
 0:?     'bool_init' ( const bool)
 0:?       true (const bool)
@@ -353,6 +407,12 @@
 0:?     'float32_t_init' ( const float)
 0:?       13.000000
 0:?     'float64_t_init' ( const double)
+0:?       4.000000
+0:?     'neg_float16_t_init' ( const float16_t)
+0:?       -42.000000
+0:?     'neg_float32_t_init' ( const float)
+0:?       -13.000000
+0:?     'neg_float64_t_init' ( const double)
 0:?       -4.000000
 0:?     'bool_to_bool' ( const bool)
 0:?       true (const bool)
@@ -401,7 +461,7 @@
 0:?     'float32_t_to_int8_t' ( const int8_t)
 0:?       13 (const int8_t)
 0:?     'float64_t_to_int8_t' ( const int8_t)
-0:?       -4 (const int8_t)
+0:?       4 (const int8_t)
 0:?     'bool_to_int16_t' ( const int16_t)
 0:?       1 (const int16_t)
 0:?     'int8_t_to_int16_t' ( const int16_t)
@@ -425,7 +485,7 @@
 0:?     'float32_t_to_int16_t' ( const int16_t)
 0:?       13 (const int16_t)
 0:?     'float64_t_to_int16_t' ( const int16_t)
-0:?       -4 (const int16_t)
+0:?       4 (const int16_t)
 0:?     'bool_to_int32_t' ( const int)
 0:?       1 (const int)
 0:?     'int8_t_to_int32_t' ( const int)
@@ -449,7 +509,7 @@
 0:?     'float32_t_to_int32_t' ( const int)
 0:?       13 (const int)
 0:?     'float64_t_to_int32_t' ( const int)
-0:?       -4 (const int)
+0:?       4 (const int)
 0:?     'bool_to_int64_t' ( const int64_t)
 0:?       1 (const int64_t)
 0:?     'int8_t_to_int64_t' ( const int64_t)
@@ -473,7 +533,7 @@
 0:?     'float32_t_to_int64_t' ( const int64_t)
 0:?       13 (const int64_t)
 0:?     'float64_t_to_int64_t' ( const int64_t)
-0:?       -4 (const int64_t)
+0:?       4 (const int64_t)
 0:?     'bool_to_uint8_t' ( const uint8_t)
 0:?       1 (const uint8_t)
 0:?     'int8_t_to_uint8_t' ( const uint8_t)
@@ -497,7 +557,7 @@
 0:?     'float32_t_to_uint8_t' ( const uint8_t)
 0:?       13 (const uint8_t)
 0:?     'float64_t_to_uint8_t' ( const uint8_t)
-0:?       252 (const uint8_t)
+0:?       4 (const uint8_t)
 0:?     'bool_to_uint16_t' ( const uint16_t)
 0:?       1 (const uint16_t)
 0:?     'int8_t_to_uint16_t' ( const uint16_t)
@@ -521,7 +581,7 @@
 0:?     'float32_t_to_uint16_t' ( const uint16_t)
 0:?       13 (const uint16_t)
 0:?     'float64_t_to_uint16_t' ( const uint16_t)
-0:?       65532 (const uint16_t)
+0:?       4 (const uint16_t)
 0:?     'bool_to_uint32_t' ( const uint)
 0:?       1 (const uint)
 0:?     'int8_t_to_uint32_t' ( const uint)
@@ -545,7 +605,7 @@
 0:?     'float32_t_to_uint32_t' ( const uint)
 0:?       13 (const uint)
 0:?     'float64_t_to_uint32_t' ( const uint)
-0:?       4294967292 (const uint)
+0:?       4 (const uint)
 0:?     'bool_to_uint64_t' ( const uint64_t)
 0:?       1 (const uint64_t)
 0:?     'int8_t_to_uint64_t' ( const uint64_t)
@@ -569,7 +629,7 @@
 0:?     'float32_t_to_uint64_t' ( const uint64_t)
 0:?       13 (const uint64_t)
 0:?     'float64_t_to_uint64_t' ( const uint64_t)
-0:?       18446744073709551612 (const uint64_t)
+0:?       4 (const uint64_t)
 0:?     'bool_to_float16_t' ( const float16_t)
 0:?       1.000000
 0:?     'int8_t_to_float16_t' ( const float16_t)
@@ -593,7 +653,7 @@
 0:?     'float32_t_to_float16_t' ( const float16_t)
 0:?       13.000000
 0:?     'float64_t_to_float16_t' ( const float16_t)
-0:?       -4.000000
+0:?       4.000000
 0:?     'bool_to_float32_t' ( const float)
 0:?       1.000000
 0:?     'int8_t_to_float32_t' ( const float)
@@ -617,7 +677,7 @@
 0:?     'float32_t_to_float32_t' ( const float)
 0:?       13.000000
 0:?     'float64_t_to_float32_t' ( const float)
-0:?       -4.000000
+0:?       4.000000
 0:?     'bool_to_float64_t' ( const double)
 0:?       1.000000
 0:?     'int8_t_to_float64_t' ( const double)
@@ -641,5 +701,53 @@
 0:?     'float32_t_to_float64_t' ( const double)
 0:?       13.000000
 0:?     'float64_t_to_float64_t' ( const double)
+0:?       4.000000
+0:?     'neg_float16_t_to_bool' ( const bool)
+0:?       true (const bool)
+0:?     'neg_float32_t_to_bool' ( const bool)
+0:?       true (const bool)
+0:?     'neg_float64_t_to_bool' ( const bool)
+0:?       true (const bool)
+0:?     'neg_float16_t_to_int8_t' ( const int8_t)
+0:?       -42 (const int8_t)
+0:?     'neg_float32_t_to_int8_t' ( const int8_t)
+0:?       -13 (const int8_t)
+0:?     'neg_float64_t_to_int8_t' ( const int8_t)
+0:?       -4 (const int8_t)
+0:?     'neg_float16_t_to_int16_t' ( const int16_t)
+0:?       -42 (const int16_t)
+0:?     'neg_float32_t_to_int16_t' ( const int16_t)
+0:?       -13 (const int16_t)
+0:?     'neg_float64_t_to_int16_t' ( const int16_t)
+0:?       -4 (const int16_t)
+0:?     'neg_float16_t_to_int32_t' ( const int)
+0:?       -42 (const int)
+0:?     'neg_float32_t_to_int32_t' ( const int)
+0:?       -13 (const int)
+0:?     'neg_float64_t_to_int32_t' ( const int)
+0:?       -4 (const int)
+0:?     'neg_float16_t_to_int64_t' ( const int64_t)
+0:?       -42 (const int64_t)
+0:?     'neg_float32_t_to_int64_t' ( const int64_t)
+0:?       -13 (const int64_t)
+0:?     'neg_float64_t_to_int64_t' ( const int64_t)
+0:?       -4 (const int64_t)
+0:?     'neg_float16_t_to_float16_t' ( const float16_t)
+0:?       -42.000000
+0:?     'neg_float32_t_to_float16_t' ( const float16_t)
+0:?       -13.000000
+0:?     'neg_float64_t_to_float16_t' ( const float16_t)
+0:?       -4.000000
+0:?     'neg_float16_t_to_float32_t' ( const float)
+0:?       -42.000000
+0:?     'neg_float32_t_to_float32_t' ( const float)
+0:?       -13.000000
+0:?     'neg_float64_t_to_float32_t' ( const float)
+0:?       -4.000000
+0:?     'neg_float16_t_to_float64_t' ( const double)
+0:?       -42.000000
+0:?     'neg_float32_t_to_float64_t' ( const double)
+0:?       -13.000000
+0:?     'neg_float64_t_to_float64_t' ( const double)
 0:?       -4.000000
 
diff --git a/Test/baseResults/coord_conventions.frag.out b/Test/baseResults/coord_conventions.frag.out
new file mode 100644
index 0000000..656c608
--- /dev/null
+++ b/Test/baseResults/coord_conventions.frag.out
@@ -0,0 +1,255 @@
+coord_conventions.frag
+Shader version: 140
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_fragment_coord_conventions
+gl_FragCoord pixel center is integer
+gl_FragCoord origin is upper left
+0:? Sequence
+0:17  Function Definition: main( ( global void)
+0:17    Function Parameters: 
+0:19    Sequence
+0:19      move second child to first child ( temp 4-component vector of float)
+0:19        'myColor' (layout( location=0) out 4-component vector of float)
+0:19        Constant:
+0:19          0.200000
+0:19          0.200000
+0:19          0.200000
+0:19          0.200000
+0:20      Test condition and select ( temp void)
+0:20        Condition
+0:20        Compare Greater Than or Equal ( temp bool)
+0:20          direct index ( temp float)
+0:20            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            10.000000
+0:20        true case
+0:21        Sequence
+0:21          move second child to first child ( temp float)
+0:21            direct index ( temp float)
+0:21              'myColor' (layout( location=0) out 4-component vector of float)
+0:21              Constant:
+0:21                2 (const int)
+0:21            Constant:
+0:21              0.800000
+0:23      Test condition and select ( temp void)
+0:23        Condition
+0:23        Compare Equal ( temp bool)
+0:23          direct index ( temp float)
+0:23            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:23            Constant:
+0:23              1 (const int)
+0:23          trunc ( global float)
+0:23            direct index ( temp float)
+0:23              'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:23              Constant:
+0:23                1 (const int)
+0:23        true case
+0:24        Sequence
+0:24          move second child to first child ( temp float)
+0:24            direct index ( temp float)
+0:24              'myColor' (layout( location=0) out 4-component vector of float)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0.800000
+0:26      Test condition and select ( temp void)
+0:26        Condition
+0:26        Compare Equal ( temp bool)
+0:26          direct index ( temp float)
+0:26            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:26            Constant:
+0:26              0 (const int)
+0:26          trunc ( global float)
+0:26            direct index ( temp float)
+0:26              'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:26              Constant:
+0:26                0 (const int)
+0:26        true case
+0:27        Sequence
+0:27          move second child to first child ( temp float)
+0:27            direct index ( temp float)
+0:27              'myColor' (layout( location=0) out 4-component vector of float)
+0:27              Constant:
+0:27                0 (const int)
+0:27            Constant:
+0:27              0.800000
+0:30      Sequence
+0:30        move second child to first child ( temp 4-component vector of float)
+0:30          'diff' ( temp 4-component vector of float)
+0:30          subtract ( temp 4-component vector of float)
+0:30            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:30            'i' ( smooth in 4-component vector of float)
+0:31      Test condition and select ( temp void)
+0:31        Condition
+0:31        Compare Greater Than ( temp bool)
+0:31          Absolute value ( global float)
+0:31            direct index ( temp float)
+0:31              'diff' ( temp 4-component vector of float)
+0:31              Constant:
+0:31                2 (const int)
+0:31          Constant:
+0:31            0.001000
+0:31        true case
+0:32        move second child to first child ( temp float)
+0:32          direct index ( temp float)
+0:32            'myColor' (layout( location=0) out 4-component vector of float)
+0:32            Constant:
+0:32              2 (const int)
+0:32          Constant:
+0:32            0.500000
+0:33      Test condition and select ( temp void)
+0:33        Condition
+0:33        Compare Greater Than ( temp bool)
+0:33          Absolute value ( global float)
+0:33            direct index ( temp float)
+0:33              'diff' ( temp 4-component vector of float)
+0:33              Constant:
+0:33                3 (const int)
+0:33          Constant:
+0:33            0.001000
+0:33        true case
+0:34        move second child to first child ( temp float)
+0:34          direct index ( temp float)
+0:34            'myColor' (layout( location=0) out 4-component vector of float)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0.500000
+0:?   Linker Objects
+0:?     'i' ( smooth in 4-component vector of float)
+0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:?     'myColor' (layout( location=0) out 4-component vector of float)
+0:?     'eps' ( const float)
+0:?       0.001000
+
+
+Linked fragment stage:
+
+
+Shader version: 140
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_fragment_coord_conventions
+gl_FragCoord pixel center is integer
+gl_FragCoord origin is upper left
+0:? Sequence
+0:17  Function Definition: main( ( global void)
+0:17    Function Parameters: 
+0:19    Sequence
+0:19      move second child to first child ( temp 4-component vector of float)
+0:19        'myColor' (layout( location=0) out 4-component vector of float)
+0:19        Constant:
+0:19          0.200000
+0:19          0.200000
+0:19          0.200000
+0:19          0.200000
+0:20      Test condition and select ( temp void)
+0:20        Condition
+0:20        Compare Greater Than or Equal ( temp bool)
+0:20          direct index ( temp float)
+0:20            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            10.000000
+0:20        true case
+0:21        Sequence
+0:21          move second child to first child ( temp float)
+0:21            direct index ( temp float)
+0:21              'myColor' (layout( location=0) out 4-component vector of float)
+0:21              Constant:
+0:21                2 (const int)
+0:21            Constant:
+0:21              0.800000
+0:23      Test condition and select ( temp void)
+0:23        Condition
+0:23        Compare Equal ( temp bool)
+0:23          direct index ( temp float)
+0:23            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:23            Constant:
+0:23              1 (const int)
+0:23          trunc ( global float)
+0:23            direct index ( temp float)
+0:23              'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:23              Constant:
+0:23                1 (const int)
+0:23        true case
+0:24        Sequence
+0:24          move second child to first child ( temp float)
+0:24            direct index ( temp float)
+0:24              'myColor' (layout( location=0) out 4-component vector of float)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0.800000
+0:26      Test condition and select ( temp void)
+0:26        Condition
+0:26        Compare Equal ( temp bool)
+0:26          direct index ( temp float)
+0:26            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:26            Constant:
+0:26              0 (const int)
+0:26          trunc ( global float)
+0:26            direct index ( temp float)
+0:26              'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:26              Constant:
+0:26                0 (const int)
+0:26        true case
+0:27        Sequence
+0:27          move second child to first child ( temp float)
+0:27            direct index ( temp float)
+0:27              'myColor' (layout( location=0) out 4-component vector of float)
+0:27              Constant:
+0:27                0 (const int)
+0:27            Constant:
+0:27              0.800000
+0:30      Sequence
+0:30        move second child to first child ( temp 4-component vector of float)
+0:30          'diff' ( temp 4-component vector of float)
+0:30          subtract ( temp 4-component vector of float)
+0:30            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:30            'i' ( smooth in 4-component vector of float)
+0:31      Test condition and select ( temp void)
+0:31        Condition
+0:31        Compare Greater Than ( temp bool)
+0:31          Absolute value ( global float)
+0:31            direct index ( temp float)
+0:31              'diff' ( temp 4-component vector of float)
+0:31              Constant:
+0:31                2 (const int)
+0:31          Constant:
+0:31            0.001000
+0:31        true case
+0:32        move second child to first child ( temp float)
+0:32          direct index ( temp float)
+0:32            'myColor' (layout( location=0) out 4-component vector of float)
+0:32            Constant:
+0:32              2 (const int)
+0:32          Constant:
+0:32            0.500000
+0:33      Test condition and select ( temp void)
+0:33        Condition
+0:33        Compare Greater Than ( temp bool)
+0:33          Absolute value ( global float)
+0:33            direct index ( temp float)
+0:33              'diff' ( temp 4-component vector of float)
+0:33              Constant:
+0:33                3 (const int)
+0:33          Constant:
+0:33            0.001000
+0:33        true case
+0:34        move second child to first child ( temp float)
+0:34          direct index ( temp float)
+0:34            'myColor' (layout( location=0) out 4-component vector of float)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0.500000
+0:?   Linker Objects
+0:?     'i' ( smooth in 4-component vector of float)
+0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:?     'myColor' (layout( location=0) out 4-component vector of float)
+0:?     'eps' ( const float)
+0:?       0.001000
+
diff --git a/Test/baseResults/enhanced.0.frag.out b/Test/baseResults/enhanced.0.frag.out
new file mode 100644
index 0000000..1171bfa
--- /dev/null
+++ b/Test/baseResults/enhanced.0.frag.out
@@ -0,0 +1,6 @@
+enhanced.0.frag
+ERROR: enhanced.0.frag:7: ' vec4 constructor' : not enough data provided for construction 
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/enhanced.1.frag.out b/Test/baseResults/enhanced.1.frag.out
new file mode 100644
index 0000000..42f5b72
--- /dev/null
+++ b/Test/baseResults/enhanced.1.frag.out
@@ -0,0 +1,6 @@
+enhanced.1.frag
+ERROR: enhanced.1.frag:9: 'v2' : no such field in structure 'vVert'
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/enhanced.2.frag.out b/Test/baseResults/enhanced.2.frag.out
new file mode 100644
index 0000000..a7e48de
--- /dev/null
+++ b/Test/baseResults/enhanced.2.frag.out
@@ -0,0 +1,6 @@
+enhanced.2.frag
+ERROR: enhanced.2.frag:5: ' vec3 constructor' : too many arguments 
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/enhanced.3.link.out b/Test/baseResults/enhanced.3.link.out
new file mode 100644
index 0000000..c0e6a20
--- /dev/null
+++ b/Test/baseResults/enhanced.3.link.out
@@ -0,0 +1,8 @@
+enhanced.3.vert
+enhanced.3.frag
+ERROR: Linking vertex and fragment stages: Member names and types must match:
+    Block: VS_OUT
+        vertex stage: " vec2 TexCoords"
+        fragment stage: " vec2 foobar"
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/enhanced.4.link.out b/Test/baseResults/enhanced.4.link.out
new file mode 100644
index 0000000..2c0acf4
--- /dev/null
+++ b/Test/baseResults/enhanced.4.link.out
@@ -0,0 +1,7 @@
+enhanced.4.vert
+enhanced.4.frag
+ERROR: Linking vertex and fragment stages: Layout location qualifier must match:
+    vertex stage: Block: VS_OUT Instance: vs_out: "layout( location=0) out"
+    fragment stage: Block: VS_OUT Instance: fs_in: "layout( location=1) in"
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/enhanced.5.link.out b/Test/baseResults/enhanced.5.link.out
new file mode 100644
index 0000000..929cfce
--- /dev/null
+++ b/Test/baseResults/enhanced.5.link.out
@@ -0,0 +1,8 @@
+enhanced.5.vert
+enhanced.5.frag
+ERROR: Linking vertex and fragment stages: Member names and types must match:
+    Block: VS_OUT
+        vertex stage: " vec2 TexCoords"
+        fragment stage: " vec3 TexCoords"
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/enhanced.6.link.out b/Test/baseResults/enhanced.6.link.out
new file mode 100644
index 0000000..9962628
--- /dev/null
+++ b/Test/baseResults/enhanced.6.link.out
@@ -0,0 +1,7 @@
+enhanced.6.vert
+enhanced.6.frag
+ERROR: Linking vertex and fragment stages: Array sizes must be compatible:
+    vertex stage: " VS_OUT{ vec2 TexCoords} vs_out[2]"
+    fragment stage: " VS_OUT{ vec2 TexCoords} fs_in[1]"
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/enhanced.7.link.out b/Test/baseResults/enhanced.7.link.out
new file mode 100644
index 0000000..a6333be
--- /dev/null
+++ b/Test/baseResults/enhanced.7.link.out
@@ -0,0 +1,7 @@
+enhanced.7.vert
+enhanced.7.frag
+ERROR: Linking vertex and fragment stages: vertex block member has no corresponding member in fragment block:
+    vertex stage: Block: Vertex, Member: ii
+    fragment stage: Block: Vertex, Member: n/a 
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/floatBitsToInt.vert.out b/Test/baseResults/floatBitsToInt.vert.out
new file mode 100644
index 0000000..6d5185c
--- /dev/null
+++ b/Test/baseResults/floatBitsToInt.vert.out
@@ -0,0 +1,217 @@
+floatBitsToInt.vert
+WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
+
+Shader version: 150
+Requested GL_ARB_gpu_shader5
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:8    Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:8        'result' ( smooth out 4-component vector of float)
+0:8        Constant:
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:9      Sequence
+0:9        move second child to first child ( temp int)
+0:9          'ret_val' ( temp int)
+0:9          floatBitsToInt ( global int)
+0:9            'value' ( uniform float)
+0:10      Test condition and select ( temp void)
+0:10        Condition
+0:10        Compare Not Equal ( temp bool)
+0:10          'expected_value' ( uniform int)
+0:10          'ret_val' ( temp int)
+0:10        true case
+0:10        Sequence
+0:10          move second child to first child ( temp 4-component vector of float)
+0:10            'result' ( smooth out 4-component vector of float)
+0:10            Constant:
+0:10              0.000000
+0:10              0.000000
+0:10              0.000000
+0:10              0.000000
+0:12      switch
+0:12      condition
+0:12        'gl_VertexID' ( gl_VertexId int VertexId)
+0:12      body
+0:12        Sequence
+0:13          case:  with expression
+0:13            Constant:
+0:13              0 (const int)
+0:?           Sequence
+0:13            move second child to first child ( temp 4-component vector of float)
+0:13              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:13                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:13                Constant:
+0:13                  0 (const uint)
+0:13              Constant:
+0:13                -1.000000
+0:13                1.000000
+0:13                0.000000
+0:13                1.000000
+0:13            Branch: Break
+0:14          case:  with expression
+0:14            Constant:
+0:14              1 (const int)
+0:?           Sequence
+0:14            move second child to first child ( temp 4-component vector of float)
+0:14              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:14                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              Constant:
+0:14                1.000000
+0:14                1.000000
+0:14                0.000000
+0:14                1.000000
+0:14            Branch: Break
+0:15          case:  with expression
+0:15            Constant:
+0:15              2 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp 4-component vector of float)
+0:15              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:15                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              Constant:
+0:15                -1.000000
+0:15                -1.000000
+0:15                0.000000
+0:15                1.000000
+0:15            Branch: Break
+0:16          case:  with expression
+0:16            Constant:
+0:16              3 (const int)
+0:?           Sequence
+0:16            move second child to first child ( temp 4-component vector of float)
+0:16              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:16                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              Constant:
+0:16                1.000000
+0:16                -1.000000
+0:16                0.000000
+0:16                1.000000
+0:16            Branch: Break
+0:?   Linker Objects
+0:?     'expected_value' ( uniform int)
+0:?     'value' ( uniform float)
+0:?     'result' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 150
+Requested GL_ARB_gpu_shader5
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:8    Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:8        'result' ( smooth out 4-component vector of float)
+0:8        Constant:
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:9      Sequence
+0:9        move second child to first child ( temp int)
+0:9          'ret_val' ( temp int)
+0:9          floatBitsToInt ( global int)
+0:9            'value' ( uniform float)
+0:10      Test condition and select ( temp void)
+0:10        Condition
+0:10        Compare Not Equal ( temp bool)
+0:10          'expected_value' ( uniform int)
+0:10          'ret_val' ( temp int)
+0:10        true case
+0:10        Sequence
+0:10          move second child to first child ( temp 4-component vector of float)
+0:10            'result' ( smooth out 4-component vector of float)
+0:10            Constant:
+0:10              0.000000
+0:10              0.000000
+0:10              0.000000
+0:10              0.000000
+0:12      switch
+0:12      condition
+0:12        'gl_VertexID' ( gl_VertexId int VertexId)
+0:12      body
+0:12        Sequence
+0:13          case:  with expression
+0:13            Constant:
+0:13              0 (const int)
+0:?           Sequence
+0:13            move second child to first child ( temp 4-component vector of float)
+0:13              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:13                'anon@0' ( 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})
+0:13                Constant:
+0:13                  0 (const uint)
+0:13              Constant:
+0:13                -1.000000
+0:13                1.000000
+0:13                0.000000
+0:13                1.000000
+0:13            Branch: Break
+0:14          case:  with expression
+0:14            Constant:
+0:14              1 (const int)
+0:?           Sequence
+0:14            move second child to first child ( temp 4-component vector of float)
+0:14              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:14                'anon@0' ( 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})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              Constant:
+0:14                1.000000
+0:14                1.000000
+0:14                0.000000
+0:14                1.000000
+0:14            Branch: Break
+0:15          case:  with expression
+0:15            Constant:
+0:15              2 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp 4-component vector of float)
+0:15              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:15                'anon@0' ( 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})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              Constant:
+0:15                -1.000000
+0:15                -1.000000
+0:15                0.000000
+0:15                1.000000
+0:15            Branch: Break
+0:16          case:  with expression
+0:16            Constant:
+0:16              3 (const int)
+0:?           Sequence
+0:16            move second child to first child ( temp 4-component vector of float)
+0:16              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:16                'anon@0' ( 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})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              Constant:
+0:16                1.000000
+0:16                -1.000000
+0:16                0.000000
+0:16                1.000000
+0:16            Branch: Break
+0:?   Linker Objects
+0:?     'expected_value' ( uniform int)
+0:?     'value' ( uniform float)
+0:?     'result' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/gl_FragCoord.frag.out b/Test/baseResults/gl_FragCoord.frag.out
new file mode 100644
index 0000000..da9e8dc
--- /dev/null
+++ b/Test/baseResults/gl_FragCoord.frag.out
@@ -0,0 +1,269 @@
+gl_FragCoord.frag
+Shader version: 150
+Requested GL_ARB_explicit_attrib_location
+gl_FragCoord pixel center is integer
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Sequence
+0:9    move second child to first child ( temp float)
+0:9      'myGlobalVar' ( global float)
+0:9      direct index ( temp float)
+0:9        'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:9        Constant:
+0:9          0 (const int)
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp 4-component vector of float)
+0:17        'myColor' (layout( location=0) out 4-component vector of float)
+0:17        Constant:
+0:17          0.200000
+0:17          0.200000
+0:17          0.200000
+0:17          0.200000
+0:18      Test condition and select ( temp void)
+0:18        Condition
+0:18        Compare Greater Than or Equal ( temp bool)
+0:18          direct index ( temp float)
+0:18            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:18            Constant:
+0:18              1 (const int)
+0:18          Constant:
+0:18            10.000000
+0:18        true case
+0:19        Sequence
+0:19          move second child to first child ( temp float)
+0:19            direct index ( temp float)
+0:19              'myColor' (layout( location=0) out 4-component vector of float)
+0:19              Constant:
+0:19                2 (const int)
+0:19            Constant:
+0:19              0.800000
+0:21      Test condition and select ( temp void)
+0:21        Condition
+0:21        Compare Equal ( temp bool)
+0:21          direct index ( temp float)
+0:21            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:21            Constant:
+0:21              1 (const int)
+0:21          trunc ( global float)
+0:21            direct index ( temp float)
+0:21              'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:21              Constant:
+0:21                1 (const int)
+0:21        true case
+0:22        Sequence
+0:22          move second child to first child ( temp float)
+0:22            direct index ( temp float)
+0:22              'myColor' (layout( location=0) out 4-component vector of float)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Constant:
+0:22              0.800000
+0:24      Test condition and select ( temp void)
+0:24        Condition
+0:24        Compare Equal ( temp bool)
+0:24          direct index ( temp float)
+0:24            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:24            Constant:
+0:24              0 (const int)
+0:24          trunc ( global float)
+0:24            direct index ( temp float)
+0:24              'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:24              Constant:
+0:24                0 (const int)
+0:24        true case
+0:25        Sequence
+0:25          move second child to first child ( temp float)
+0:25            direct index ( temp float)
+0:25              'myColor' (layout( location=0) out 4-component vector of float)
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              0.800000
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of float)
+0:28          'diff' ( temp 4-component vector of float)
+0:28          subtract ( temp 4-component vector of float)
+0:28            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:28            'i' ( smooth in 4-component vector of float)
+0:29      Test condition and select ( temp void)
+0:29        Condition
+0:29        Compare Greater Than ( temp bool)
+0:29          Absolute value ( global float)
+0:29            direct index ( temp float)
+0:29              'diff' ( temp 4-component vector of float)
+0:29              Constant:
+0:29                2 (const int)
+0:29          Constant:
+0:29            0.001000
+0:29        true case
+0:29        move second child to first child ( temp float)
+0:29          direct index ( temp float)
+0:29            'myColor' (layout( location=0) out 4-component vector of float)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0.500000
+0:30      Test condition and select ( temp void)
+0:30        Condition
+0:30        Compare Greater Than ( temp bool)
+0:30          Absolute value ( global float)
+0:30            direct index ( temp float)
+0:30              'diff' ( temp 4-component vector of float)
+0:30              Constant:
+0:30                3 (const int)
+0:30          Constant:
+0:30            0.001000
+0:30        true case
+0:30        move second child to first child ( temp float)
+0:30          direct index ( temp float)
+0:30            'myColor' (layout( location=0) out 4-component vector of float)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0.500000
+0:?   Linker Objects
+0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:?     'myGlobalVar' ( global float)
+0:?     'i' ( smooth in 4-component vector of float)
+0:?     'myColor' (layout( location=0) out 4-component vector of float)
+0:?     'eps' ( const float)
+0:?       0.001000
+
+
+Linked fragment stage:
+
+
+Shader version: 150
+Requested GL_ARB_explicit_attrib_location
+gl_FragCoord pixel center is integer
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Sequence
+0:9    move second child to first child ( temp float)
+0:9      'myGlobalVar' ( global float)
+0:9      direct index ( temp float)
+0:9        'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:9        Constant:
+0:9          0 (const int)
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp 4-component vector of float)
+0:17        'myColor' (layout( location=0) out 4-component vector of float)
+0:17        Constant:
+0:17          0.200000
+0:17          0.200000
+0:17          0.200000
+0:17          0.200000
+0:18      Test condition and select ( temp void)
+0:18        Condition
+0:18        Compare Greater Than or Equal ( temp bool)
+0:18          direct index ( temp float)
+0:18            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:18            Constant:
+0:18              1 (const int)
+0:18          Constant:
+0:18            10.000000
+0:18        true case
+0:19        Sequence
+0:19          move second child to first child ( temp float)
+0:19            direct index ( temp float)
+0:19              'myColor' (layout( location=0) out 4-component vector of float)
+0:19              Constant:
+0:19                2 (const int)
+0:19            Constant:
+0:19              0.800000
+0:21      Test condition and select ( temp void)
+0:21        Condition
+0:21        Compare Equal ( temp bool)
+0:21          direct index ( temp float)
+0:21            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:21            Constant:
+0:21              1 (const int)
+0:21          trunc ( global float)
+0:21            direct index ( temp float)
+0:21              'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:21              Constant:
+0:21                1 (const int)
+0:21        true case
+0:22        Sequence
+0:22          move second child to first child ( temp float)
+0:22            direct index ( temp float)
+0:22              'myColor' (layout( location=0) out 4-component vector of float)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Constant:
+0:22              0.800000
+0:24      Test condition and select ( temp void)
+0:24        Condition
+0:24        Compare Equal ( temp bool)
+0:24          direct index ( temp float)
+0:24            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:24            Constant:
+0:24              0 (const int)
+0:24          trunc ( global float)
+0:24            direct index ( temp float)
+0:24              'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:24              Constant:
+0:24                0 (const int)
+0:24        true case
+0:25        Sequence
+0:25          move second child to first child ( temp float)
+0:25            direct index ( temp float)
+0:25              'myColor' (layout( location=0) out 4-component vector of float)
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              0.800000
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of float)
+0:28          'diff' ( temp 4-component vector of float)
+0:28          subtract ( temp 4-component vector of float)
+0:28            'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:28            'i' ( smooth in 4-component vector of float)
+0:29      Test condition and select ( temp void)
+0:29        Condition
+0:29        Compare Greater Than ( temp bool)
+0:29          Absolute value ( global float)
+0:29            direct index ( temp float)
+0:29              'diff' ( temp 4-component vector of float)
+0:29              Constant:
+0:29                2 (const int)
+0:29          Constant:
+0:29            0.001000
+0:29        true case
+0:29        move second child to first child ( temp float)
+0:29          direct index ( temp float)
+0:29            'myColor' (layout( location=0) out 4-component vector of float)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0.500000
+0:30      Test condition and select ( temp void)
+0:30        Condition
+0:30        Compare Greater Than ( temp bool)
+0:30          Absolute value ( global float)
+0:30            direct index ( temp float)
+0:30              'diff' ( temp 4-component vector of float)
+0:30              Constant:
+0:30                3 (const int)
+0:30          Constant:
+0:30            0.001000
+0:30        true case
+0:30        move second child to first child ( temp float)
+0:30          direct index ( temp float)
+0:30            'myColor' (layout( location=0) out 4-component vector of float)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0.500000
+0:?   Linker Objects
+0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:?     'myGlobalVar' ( global float)
+0:?     'i' ( smooth in 4-component vector of float)
+0:?     'myColor' (layout( location=0) out 4-component vector of float)
+0:?     'eps' ( const float)
+0:?       0.001000
+
diff --git a/Test/baseResults/glsl.460.subgroupEXT.mesh.out b/Test/baseResults/glsl.460.subgroupEXT.mesh.out
new file mode 100644
index 0000000..8d45106
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroupEXT.mesh.out
@@ -0,0 +1,1039 @@
+glsl.460.subgroupEXT.mesh
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 64 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_EXT_mesh_shader
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+max_vertices = 81
+max_primitives = 32
+output primitive = triangles
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14      'gl_SubgroupID' ( in uint SubgroupID)
+0:15      subgroupMemoryBarrierShared ( global void)
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Branch: Return with expression
+0:77        'result' ( temp 4-component vector of float)
+0:97  Function Definition: main( ( global void)
+0:97    Function Parameters: 
+0:99    Sequence
+0:99      Sequence
+0:99        move second child to first child ( temp uint)
+0:99          'iid' ( temp uint)
+0:99          direct index ( temp uint)
+0:99            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:99            Constant:
+0:99              0 (const int)
+0:100      Sequence
+0:100        move second child to first child ( temp uint)
+0:100          'gid' ( temp uint)
+0:100          direct index ( temp uint)
+0:100            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:100            Constant:
+0:100              0 (const int)
+0:101      Sequence
+0:101        move second child to first child ( temp uint)
+0:101          'vertexCount' ( temp uint)
+0:101          Constant:
+0:101            81 (const uint)
+0:102      Sequence
+0:102        move second child to first child ( temp uint)
+0:102          'primitiveCount' ( temp uint)
+0:102          Constant:
+0:102            32 (const uint)
+0:103      SetMeshOutputsEXT ( global void)
+0:103        'vertexCount' ( temp uint)
+0:103        'primitiveCount' ( temp uint)
+0:105      move second child to first child ( temp 4-component vector of float)
+0:105        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:105          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:105            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:105            'iid' ( temp uint)
+0:105          Constant:
+0:105            0 (const int)
+0:105        Constant:
+0:105          1.000000
+0:105          1.000000
+0:105          1.000000
+0:105          1.000000
+0:106      move second child to first child ( temp float)
+0:106        gl_PointSize: direct index for structure ( out float PointSize)
+0:106          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:106            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:106            'iid' ( temp uint)
+0:106          Constant:
+0:106            1 (const int)
+0:106        Constant:
+0:106          2.000000
+0:107      move second child to first child ( temp float)
+0:107        direct index ( temp float ClipDistance)
+0:107          gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:107            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:107              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:107              'iid' ( temp uint)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Constant:
+0:107            3 (const int)
+0:107        Constant:
+0:107          3.000000
+0:108      move second child to first child ( temp float)
+0:108        direct index ( temp float CullDistance)
+0:108          gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:108            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:108              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:108              'iid' ( temp uint)
+0:108            Constant:
+0:108              3 (const int)
+0:108          Constant:
+0:108            2 (const int)
+0:108        Constant:
+0:108          4.000000
+0:110      MemoryBarrierShared ( global void)
+0:110      Barrier ( global void)
+0:112      move second child to first child ( temp 4-component vector of float)
+0:112        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:112          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:112            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:112            add ( temp uint)
+0:112              'iid' ( temp uint)
+0:112              Constant:
+0:112                1 (const uint)
+0:112          Constant:
+0:112            0 (const int)
+0:112        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:112          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:112            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:112            'iid' ( temp uint)
+0:112          Constant:
+0:112            0 (const int)
+0:113      move second child to first child ( temp float)
+0:113        gl_PointSize: direct index for structure ( out float PointSize)
+0:113          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:113            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:113            add ( temp uint)
+0:113              'iid' ( temp uint)
+0:113              Constant:
+0:113                1 (const uint)
+0:113          Constant:
+0:113            1 (const int)
+0:113        gl_PointSize: direct index for structure ( out float PointSize)
+0:113          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:113            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:113            'iid' ( temp uint)
+0:113          Constant:
+0:113            1 (const int)
+0:114      move second child to first child ( temp float)
+0:114        direct index ( temp float ClipDistance)
+0:114          gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:114            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:114              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:114              add ( temp uint)
+0:114                'iid' ( temp uint)
+0:114                Constant:
+0:114                  1 (const uint)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Constant:
+0:114            3 (const int)
+0:114        direct index ( temp float ClipDistance)
+0:114          gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:114            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:114              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:114              'iid' ( temp uint)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Constant:
+0:114            3 (const int)
+0:115      move second child to first child ( temp float)
+0:115        direct index ( temp float CullDistance)
+0:115          gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:115            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:115              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:115              add ( temp uint)
+0:115                'iid' ( temp uint)
+0:115                Constant:
+0:115                  1 (const uint)
+0:115            Constant:
+0:115              3 (const int)
+0:115          Constant:
+0:115            2 (const int)
+0:115        direct index ( temp float CullDistance)
+0:115          gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:115            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:115              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:115              'iid' ( temp uint)
+0:115            Constant:
+0:115              3 (const int)
+0:115          Constant:
+0:115            2 (const int)
+0:117      MemoryBarrierShared ( global void)
+0:117      Barrier ( global void)
+0:119      move second child to first child ( temp int)
+0:119        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:119          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:119            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:119            'iid' ( temp uint)
+0:119          Constant:
+0:119            0 (const int)
+0:119        Constant:
+0:119          6 (const int)
+0:120      move second child to first child ( temp int)
+0:120        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:120          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:120            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:120            'iid' ( temp uint)
+0:120          Constant:
+0:120            1 (const int)
+0:120        Constant:
+0:120          7 (const int)
+0:121      move second child to first child ( temp int)
+0:121        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:121          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:121            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:121            'iid' ( temp uint)
+0:121          Constant:
+0:121            2 (const int)
+0:121        Constant:
+0:121          8 (const int)
+0:122      move second child to first child ( temp bool)
+0:122        gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT)
+0:122          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:122            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:122            'iid' ( temp uint)
+0:122          Constant:
+0:122            3 (const int)
+0:122        Constant:
+0:122          false (const bool)
+0:124      MemoryBarrierShared ( global void)
+0:124      Barrier ( global void)
+0:126      move second child to first child ( temp int)
+0:126        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:126          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            add ( temp uint)
+0:126              'iid' ( temp uint)
+0:126              Constant:
+0:126                1 (const uint)
+0:126          Constant:
+0:126            0 (const int)
+0:126        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:126          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'iid' ( temp uint)
+0:126          Constant:
+0:126            0 (const int)
+0:127      move second child to first child ( temp int)
+0:127        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:127          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            add ( temp uint)
+0:127              'iid' ( temp uint)
+0:127              Constant:
+0:127                1 (const uint)
+0:127          Constant:
+0:127            1 (const int)
+0:127        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:127          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'iid' ( temp uint)
+0:127          Constant:
+0:127            1 (const int)
+0:128      move second child to first child ( temp int)
+0:128        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:128          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            add ( temp uint)
+0:128              'iid' ( temp uint)
+0:128              Constant:
+0:128                1 (const uint)
+0:128          Constant:
+0:128            2 (const int)
+0:128        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:128          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'iid' ( temp uint)
+0:128          Constant:
+0:128            2 (const int)
+0:129      move second child to first child ( temp bool)
+0:129        gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT)
+0:129          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:129            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:129            add ( temp uint)
+0:129              'iid' ( temp uint)
+0:129              Constant:
+0:129                1 (const uint)
+0:129          Constant:
+0:129            3 (const int)
+0:129        Constant:
+0:129          false (const bool)
+0:131      MemoryBarrierShared ( global void)
+0:131      Barrier ( global void)
+0:134      move second child to first child ( temp 3-component vector of uint)
+0:134        direct index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:134          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:134          Constant:
+0:134            0 (const int)
+0:134        Constant:
+0:134          1 (const uint)
+0:134          1 (const uint)
+0:134          1 (const uint)
+0:135      move second child to first child ( temp 3-component vector of uint)
+0:135        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:135          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:135          subtract ( temp uint)
+0:135            'primitiveCount' ( temp uint)
+0:135            Constant:
+0:135              1 (const uint)
+0:135        Constant:
+0:135          2 (const uint)
+0:135          2 (const uint)
+0:135          2 (const uint)
+0:136      move second child to first child ( temp 3-component vector of uint)
+0:136        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gid' ( temp uint)
+0:136        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          subtract ( temp uint)
+0:136            'gid' ( temp uint)
+0:136            Constant:
+0:136              1 (const uint)
+0:139      MemoryBarrierShared ( global void)
+0:139      Barrier ( global void)
+0:143  Function Definition: basic_works( ( global void)
+0:143    Function Parameters: 
+0:145    Sequence
+0:145      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:146      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:147      subgroupBarrier ( global void)
+0:148      subgroupMemoryBarrier ( global void)
+0:149      subgroupMemoryBarrierBuffer ( global void)
+0:150      subgroupMemoryBarrierImage ( global void)
+0:151      subgroupElect ( global bool)
+0:152      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:153      'gl_SubgroupID' ( in uint SubgroupID)
+0:154      subgroupMemoryBarrierShared ( global void)
+0:158  Function Definition: ballot_works(vf4; ( global void)
+0:158    Function Parameters: 
+0:158      'f4' ( in 4-component vector of float)
+0:159    Sequence
+0:159      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:160      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:161      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:162      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:163      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:164      subgroupBroadcast ( global 4-component vector of float)
+0:164        'f4' ( in 4-component vector of float)
+0:164        Constant:
+0:164          0 (const uint)
+0:165      subgroupBroadcastFirst ( global 4-component vector of float)
+0:165        'f4' ( in 4-component vector of float)
+0:166      Sequence
+0:166        move second child to first child ( temp 4-component vector of uint)
+0:166          'ballot' ( temp 4-component vector of uint)
+0:166          subgroupBallot ( global 4-component vector of uint)
+0:166            Constant:
+0:166              false (const bool)
+0:167      subgroupInverseBallot ( global bool)
+0:167        Constant:
+0:167          1 (const uint)
+0:167          1 (const uint)
+0:167          1 (const uint)
+0:167          1 (const uint)
+0:168      subgroupBallotBitExtract ( global bool)
+0:168        'ballot' ( temp 4-component vector of uint)
+0:168        Constant:
+0:168          0 (const uint)
+0:169      subgroupBallotBitCount ( global uint)
+0:169        'ballot' ( temp 4-component vector of uint)
+0:170      subgroupBallotInclusiveBitCount ( global uint)
+0:170        'ballot' ( temp 4-component vector of uint)
+0:171      subgroupBallotExclusiveBitCount ( global uint)
+0:171        'ballot' ( temp 4-component vector of uint)
+0:172      subgroupBallotFindLSB ( global uint)
+0:172        'ballot' ( temp 4-component vector of uint)
+0:173      subgroupBallotFindMSB ( global uint)
+0:173        'ballot' ( temp 4-component vector of uint)
+0:177  Function Definition: vote_works(vf4; ( global void)
+0:177    Function Parameters: 
+0:177      'f4' ( in 4-component vector of float)
+0:179    Sequence
+0:179      subgroupAll ( global bool)
+0:179        Constant:
+0:179          true (const bool)
+0:180      subgroupAny ( global bool)
+0:180        Constant:
+0:180          false (const bool)
+0:181      subgroupAllEqual ( global bool)
+0:181        'f4' ( in 4-component vector of float)
+0:186  Function Definition: shuffle_works(vf4; ( global void)
+0:186    Function Parameters: 
+0:186      'f4' ( in 4-component vector of float)
+0:188    Sequence
+0:188      subgroupShuffle ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:188        Constant:
+0:188          0 (const uint)
+0:189      subgroupShuffleXor ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:189        Constant:
+0:189          1 (const uint)
+0:190      subgroupShuffleUp ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:190        Constant:
+0:190          1 (const uint)
+0:191      subgroupShuffleDown ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:191        Constant:
+0:191          1 (const uint)
+0:195  Function Definition: arith_works(vf4; ( global void)
+0:195    Function Parameters: 
+0:195      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:198      subgroupAdd ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:199      subgroupMul ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:200      subgroupMin ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:201      subgroupMax ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:202      subgroupAnd ( global 4-component vector of uint)
+0:202        'ballot' ( temp 4-component vector of uint)
+0:203      subgroupOr ( global 4-component vector of uint)
+0:203        'ballot' ( temp 4-component vector of uint)
+0:204      subgroupXor ( global 4-component vector of uint)
+0:204        'ballot' ( temp 4-component vector of uint)
+0:205      subgroupInclusiveAdd ( global 4-component vector of float)
+0:205        'f4' ( in 4-component vector of float)
+0:206      subgroupInclusiveMul ( global 4-component vector of float)
+0:206        'f4' ( in 4-component vector of float)
+0:207      subgroupInclusiveMin ( global 4-component vector of float)
+0:207        'f4' ( in 4-component vector of float)
+0:208      subgroupInclusiveMax ( global 4-component vector of float)
+0:208        'f4' ( in 4-component vector of float)
+0:209      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:209        'ballot' ( temp 4-component vector of uint)
+0:210      subgroupInclusiveOr ( global 4-component vector of uint)
+0:210        'ballot' ( temp 4-component vector of uint)
+0:211      subgroupInclusiveXor ( global 4-component vector of uint)
+0:211        'ballot' ( temp 4-component vector of uint)
+0:212      subgroupExclusiveAdd ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:213      subgroupExclusiveMul ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:214      subgroupExclusiveMin ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:215      subgroupExclusiveMax ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:216      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
+0:217      subgroupExclusiveOr ( global 4-component vector of uint)
+0:217        'ballot' ( temp 4-component vector of uint)
+0:218      subgroupExclusiveXor ( global 4-component vector of uint)
+0:218        'ballot' ( temp 4-component vector of uint)
+0:222  Function Definition: clustered_works(vf4; ( global void)
+0:222    Function Parameters: 
+0:222      'f4' ( in 4-component vector of float)
+0:224    Sequence
+0:224      Sequence
+0:224        move second child to first child ( temp 4-component vector of uint)
+0:224          'ballot' ( temp 4-component vector of uint)
+0:224          Constant:
+0:224            85 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:225      subgroupClusteredAdd ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
+0:225        Constant:
+0:225          2 (const uint)
+0:226      subgroupClusteredMul ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
+0:226        Constant:
+0:226          2 (const uint)
+0:227      subgroupClusteredMin ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:227        Constant:
+0:227          2 (const uint)
+0:228      subgroupClusteredMax ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        Constant:
+0:228          2 (const uint)
+0:229      subgroupClusteredAnd ( global 4-component vector of uint)
+0:229        'ballot' ( temp 4-component vector of uint)
+0:229        Constant:
+0:229          2 (const uint)
+0:230      subgroupClusteredOr ( global 4-component vector of uint)
+0:230        'ballot' ( temp 4-component vector of uint)
+0:230        Constant:
+0:230          2 (const uint)
+0:231      subgroupClusteredXor ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:231        Constant:
+0:231          2 (const uint)
+0:235  Function Definition: quad_works(vf4; ( global void)
+0:235    Function Parameters: 
+0:235      'f4' ( in 4-component vector of float)
+0:237    Sequence
+0:237      subgroupQuadBroadcast ( global 4-component vector of float)
+0:237        'f4' ( in 4-component vector of float)
+0:237        Constant:
+0:237          0 (const uint)
+0:238      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:238        'f4' ( in 4-component vector of float)
+0:239      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:240      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:?     'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:?     'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+
+
+Linked mesh stage:
+
+
+Shader version: 460
+Requested GL_EXT_mesh_shader
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+max_vertices = 81
+max_primitives = 32
+output primitive = triangles
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:97  Function Definition: main( ( global void)
+0:97    Function Parameters: 
+0:99    Sequence
+0:99      Sequence
+0:99        move second child to first child ( temp uint)
+0:99          'iid' ( temp uint)
+0:99          direct index ( temp uint)
+0:99            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:99            Constant:
+0:99              0 (const int)
+0:100      Sequence
+0:100        move second child to first child ( temp uint)
+0:100          'gid' ( temp uint)
+0:100          direct index ( temp uint)
+0:100            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:100            Constant:
+0:100              0 (const int)
+0:101      Sequence
+0:101        move second child to first child ( temp uint)
+0:101          'vertexCount' ( temp uint)
+0:101          Constant:
+0:101            81 (const uint)
+0:102      Sequence
+0:102        move second child to first child ( temp uint)
+0:102          'primitiveCount' ( temp uint)
+0:102          Constant:
+0:102            32 (const uint)
+0:103      SetMeshOutputsEXT ( global void)
+0:103        'vertexCount' ( temp uint)
+0:103        'primitiveCount' ( temp uint)
+0:105      move second child to first child ( temp 4-component vector of float)
+0:105        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:105          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:105            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:105            'iid' ( temp uint)
+0:105          Constant:
+0:105            0 (const int)
+0:105        Constant:
+0:105          1.000000
+0:105          1.000000
+0:105          1.000000
+0:105          1.000000
+0:106      move second child to first child ( temp float)
+0:106        gl_PointSize: direct index for structure ( out float PointSize)
+0:106          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:106            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:106            'iid' ( temp uint)
+0:106          Constant:
+0:106            1 (const int)
+0:106        Constant:
+0:106          2.000000
+0:107      move second child to first child ( temp float)
+0:107        direct index ( temp float ClipDistance)
+0:107          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:107            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:107              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:107              'iid' ( temp uint)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Constant:
+0:107            3 (const int)
+0:107        Constant:
+0:107          3.000000
+0:108      move second child to first child ( temp float)
+0:108        direct index ( temp float CullDistance)
+0:108          gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:108            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:108              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:108              'iid' ( temp uint)
+0:108            Constant:
+0:108              3 (const int)
+0:108          Constant:
+0:108            2 (const int)
+0:108        Constant:
+0:108          4.000000
+0:110      MemoryBarrierShared ( global void)
+0:110      Barrier ( global void)
+0:112      move second child to first child ( temp 4-component vector of float)
+0:112        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:112          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:112            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:112            add ( temp uint)
+0:112              'iid' ( temp uint)
+0:112              Constant:
+0:112                1 (const uint)
+0:112          Constant:
+0:112            0 (const int)
+0:112        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:112          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:112            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:112            'iid' ( temp uint)
+0:112          Constant:
+0:112            0 (const int)
+0:113      move second child to first child ( temp float)
+0:113        gl_PointSize: direct index for structure ( out float PointSize)
+0:113          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:113            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:113            add ( temp uint)
+0:113              'iid' ( temp uint)
+0:113              Constant:
+0:113                1 (const uint)
+0:113          Constant:
+0:113            1 (const int)
+0:113        gl_PointSize: direct index for structure ( out float PointSize)
+0:113          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:113            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:113            'iid' ( temp uint)
+0:113          Constant:
+0:113            1 (const int)
+0:114      move second child to first child ( temp float)
+0:114        direct index ( temp float ClipDistance)
+0:114          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:114            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:114              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:114              add ( temp uint)
+0:114                'iid' ( temp uint)
+0:114                Constant:
+0:114                  1 (const uint)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Constant:
+0:114            3 (const int)
+0:114        direct index ( temp float ClipDistance)
+0:114          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:114            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:114              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:114              'iid' ( temp uint)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Constant:
+0:114            3 (const int)
+0:115      move second child to first child ( temp float)
+0:115        direct index ( temp float CullDistance)
+0:115          gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:115            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:115              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:115              add ( temp uint)
+0:115                'iid' ( temp uint)
+0:115                Constant:
+0:115                  1 (const uint)
+0:115            Constant:
+0:115              3 (const int)
+0:115          Constant:
+0:115            2 (const int)
+0:115        direct index ( temp float CullDistance)
+0:115          gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:115            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:115              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:115              'iid' ( temp uint)
+0:115            Constant:
+0:115              3 (const int)
+0:115          Constant:
+0:115            2 (const int)
+0:117      MemoryBarrierShared ( global void)
+0:117      Barrier ( global void)
+0:119      move second child to first child ( temp int)
+0:119        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:119          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:119            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:119            'iid' ( temp uint)
+0:119          Constant:
+0:119            0 (const int)
+0:119        Constant:
+0:119          6 (const int)
+0:120      move second child to first child ( temp int)
+0:120        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:120          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:120            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:120            'iid' ( temp uint)
+0:120          Constant:
+0:120            1 (const int)
+0:120        Constant:
+0:120          7 (const int)
+0:121      move second child to first child ( temp int)
+0:121        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:121          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:121            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:121            'iid' ( temp uint)
+0:121          Constant:
+0:121            2 (const int)
+0:121        Constant:
+0:121          8 (const int)
+0:122      move second child to first child ( temp bool)
+0:122        gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT)
+0:122          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:122            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:122            'iid' ( temp uint)
+0:122          Constant:
+0:122            3 (const int)
+0:122        Constant:
+0:122          false (const bool)
+0:124      MemoryBarrierShared ( global void)
+0:124      Barrier ( global void)
+0:126      move second child to first child ( temp int)
+0:126        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:126          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            add ( temp uint)
+0:126              'iid' ( temp uint)
+0:126              Constant:
+0:126                1 (const uint)
+0:126          Constant:
+0:126            0 (const int)
+0:126        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:126          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'iid' ( temp uint)
+0:126          Constant:
+0:126            0 (const int)
+0:127      move second child to first child ( temp int)
+0:127        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:127          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            add ( temp uint)
+0:127              'iid' ( temp uint)
+0:127              Constant:
+0:127                1 (const uint)
+0:127          Constant:
+0:127            1 (const int)
+0:127        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:127          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'iid' ( temp uint)
+0:127          Constant:
+0:127            1 (const int)
+0:128      move second child to first child ( temp int)
+0:128        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:128          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            add ( temp uint)
+0:128              'iid' ( temp uint)
+0:128              Constant:
+0:128                1 (const uint)
+0:128          Constant:
+0:128            2 (const int)
+0:128        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:128          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'iid' ( temp uint)
+0:128          Constant:
+0:128            2 (const int)
+0:129      move second child to first child ( temp bool)
+0:129        gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT)
+0:129          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:129            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:129            add ( temp uint)
+0:129              'iid' ( temp uint)
+0:129              Constant:
+0:129                1 (const uint)
+0:129          Constant:
+0:129            3 (const int)
+0:129        Constant:
+0:129          false (const bool)
+0:131      MemoryBarrierShared ( global void)
+0:131      Barrier ( global void)
+0:134      move second child to first child ( temp 3-component vector of uint)
+0:134        direct index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:134          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:134          Constant:
+0:134            0 (const int)
+0:134        Constant:
+0:134          1 (const uint)
+0:134          1 (const uint)
+0:134          1 (const uint)
+0:135      move second child to first child ( temp 3-component vector of uint)
+0:135        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:135          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:135          subtract ( temp uint)
+0:135            'primitiveCount' ( temp uint)
+0:135            Constant:
+0:135              1 (const uint)
+0:135        Constant:
+0:135          2 (const uint)
+0:135          2 (const uint)
+0:135          2 (const uint)
+0:136      move second child to first child ( temp 3-component vector of uint)
+0:136        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gid' ( temp uint)
+0:136        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          subtract ( temp uint)
+0:136            'gid' ( temp uint)
+0:136            Constant:
+0:136              1 (const uint)
+0:139      MemoryBarrierShared ( global void)
+0:139      Barrier ( global void)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:?     'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:?     'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+
diff --git a/Test/baseResults/glsl.460.subgroupEXT.task.out b/Test/baseResults/glsl.460.subgroupEXT.task.out
new file mode 100644
index 0000000..c756f38
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroupEXT.task.out
@@ -0,0 +1,707 @@
+glsl.460.subgroupEXT.task
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 64 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_EXT_mesh_shader
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14      'gl_SubgroupID' ( in uint SubgroupID)
+0:15      subgroupMemoryBarrierShared ( global void)
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Branch: Return with expression
+0:77        'result' ( temp 4-component vector of float)
+0:102  Function Definition: main( ( global void)
+0:102    Function Parameters: 
+0:104    Sequence
+0:104      Sequence
+0:104        move second child to first child ( temp uint)
+0:104          'iid' ( temp uint)
+0:104          direct index ( temp uint)
+0:104            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:104            Constant:
+0:104              0 (const int)
+0:105      Sequence
+0:105        move second child to first child ( temp uint)
+0:105          'gid' ( temp uint)
+0:105          direct index ( temp uint)
+0:105            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:105            Constant:
+0:105              0 (const int)
+0:108      Sequence
+0:108        Sequence
+0:108          move second child to first child ( temp uint)
+0:108            'i' ( temp uint)
+0:108            Constant:
+0:108              0 (const uint)
+0:108        Loop with condition tested first
+0:108          Loop Condition
+0:108          Compare Less Than ( temp bool)
+0:108            'i' ( temp uint)
+0:108            Constant:
+0:108              10 (const uint)
+0:108          Loop Body
+0:109          Sequence
+0:109            move second child to first child ( temp 4-component vector of float)
+0:109              indirect index ( temp 4-component vector of float)
+0:109                'mem' ( shared 10-element array of 4-component vector of float)
+0:109                'i' ( temp uint)
+0:109              Construct vec4 ( temp 4-component vector of float)
+0:109                Convert uint to float ( temp float)
+0:109                  add ( temp uint)
+0:109                    'i' ( temp uint)
+0:109                    uni_value: direct index for structure (layout( column_major shared) uniform uint)
+0:109                      'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:109                      Constant:
+0:109                        0 (const uint)
+0:108          Loop Terminal Expression
+0:108          Pre-Increment ( temp uint)
+0:108            'i' ( temp uint)
+0:111      imageStore ( global void)
+0:111        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:111        Construct ivec2 ( temp 2-component vector of int)
+0:111          Convert uint to int ( temp int)
+0:111            'iid' ( temp uint)
+0:111        indirect index ( temp 4-component vector of float)
+0:111          'mem' ( shared 10-element array of 4-component vector of float)
+0:111          'gid' ( temp uint)
+0:112      imageStore ( global void)
+0:112        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:112        Construct ivec2 ( temp 2-component vector of int)
+0:112          Convert uint to int ( temp int)
+0:112            'iid' ( temp uint)
+0:112        indirect index ( temp 4-component vector of float)
+0:112          'mem' ( shared 10-element array of 4-component vector of float)
+0:112          add ( temp uint)
+0:112            'gid' ( temp uint)
+0:112            Constant:
+0:112              1 (const uint)
+0:114      MemoryBarrierShared ( global void)
+0:114      Barrier ( global void)
+0:118      move second child to first child ( temp 2-component vector of float)
+0:118        dummy: direct index for structure ( global 2-component vector of float)
+0:118          'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:118          Constant:
+0:118            0 (const int)
+0:118        Constant:
+0:118          30.000000
+0:118          31.000000
+0:119      move second child to first child ( temp 2-component vector of float)
+0:119        direct index ( temp 2-component vector of float)
+0:119          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:119            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:119            Constant:
+0:119              1 (const int)
+0:119          Constant:
+0:119            0 (const int)
+0:119        Constant:
+0:119          32.000000
+0:119          33.000000
+0:120      move second child to first child ( temp 2-component vector of float)
+0:120        direct index ( temp 2-component vector of float)
+0:120          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:120            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            1 (const int)
+0:120        Constant:
+0:120          34.000000
+0:120          35.000000
+0:121      move second child to first child ( temp 2-component vector of float)
+0:121        direct index ( temp 2-component vector of float)
+0:121          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:121            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:121            Constant:
+0:121              1 (const int)
+0:121          Constant:
+0:121            2 (const int)
+0:121        indirect index ( temp 2-component vector of float)
+0:121          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:121            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:121            Constant:
+0:121              1 (const int)
+0:121          mod ( temp uint)
+0:121            'gid' ( temp uint)
+0:121            Constant:
+0:121              2 (const uint)
+0:123      MemoryBarrierShared ( global void)
+0:123      Barrier ( global void)
+0:126      EmitMeshTasksEXT ( global void)
+0:126        Constant:
+0:126          3 (const uint)
+0:126        Constant:
+0:126          1 (const uint)
+0:126        Constant:
+0:126          1 (const uint)
+0:130  Function Definition: basic_works( ( global void)
+0:130    Function Parameters: 
+0:132    Sequence
+0:132      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:133      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:134      subgroupBarrier ( global void)
+0:135      subgroupMemoryBarrier ( global void)
+0:136      subgroupMemoryBarrierBuffer ( global void)
+0:137      subgroupMemoryBarrierImage ( global void)
+0:138      subgroupElect ( global bool)
+0:139      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:140      'gl_SubgroupID' ( in uint SubgroupID)
+0:141      subgroupMemoryBarrierShared ( global void)
+0:145  Function Definition: ballot_works(vf4; ( global void)
+0:145    Function Parameters: 
+0:145      'f4' ( in 4-component vector of float)
+0:146    Sequence
+0:146      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:147      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:148      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:149      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:150      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:151      subgroupBroadcast ( global 4-component vector of float)
+0:151        'f4' ( in 4-component vector of float)
+0:151        Constant:
+0:151          0 (const uint)
+0:152      subgroupBroadcastFirst ( global 4-component vector of float)
+0:152        'f4' ( in 4-component vector of float)
+0:153      Sequence
+0:153        move second child to first child ( temp 4-component vector of uint)
+0:153          'ballot' ( temp 4-component vector of uint)
+0:153          subgroupBallot ( global 4-component vector of uint)
+0:153            Constant:
+0:153              false (const bool)
+0:154      subgroupInverseBallot ( global bool)
+0:154        Constant:
+0:154          1 (const uint)
+0:154          1 (const uint)
+0:154          1 (const uint)
+0:154          1 (const uint)
+0:155      subgroupBallotBitExtract ( global bool)
+0:155        'ballot' ( temp 4-component vector of uint)
+0:155        Constant:
+0:155          0 (const uint)
+0:156      subgroupBallotBitCount ( global uint)
+0:156        'ballot' ( temp 4-component vector of uint)
+0:157      subgroupBallotInclusiveBitCount ( global uint)
+0:157        'ballot' ( temp 4-component vector of uint)
+0:158      subgroupBallotExclusiveBitCount ( global uint)
+0:158        'ballot' ( temp 4-component vector of uint)
+0:159      subgroupBallotFindLSB ( global uint)
+0:159        'ballot' ( temp 4-component vector of uint)
+0:160      subgroupBallotFindMSB ( global uint)
+0:160        'ballot' ( temp 4-component vector of uint)
+0:164  Function Definition: vote_works(vf4; ( global void)
+0:164    Function Parameters: 
+0:164      'f4' ( in 4-component vector of float)
+0:166    Sequence
+0:166      subgroupAll ( global bool)
+0:166        Constant:
+0:166          true (const bool)
+0:167      subgroupAny ( global bool)
+0:167        Constant:
+0:167          false (const bool)
+0:168      subgroupAllEqual ( global bool)
+0:168        'f4' ( in 4-component vector of float)
+0:173  Function Definition: shuffle_works(vf4; ( global void)
+0:173    Function Parameters: 
+0:173      'f4' ( in 4-component vector of float)
+0:175    Sequence
+0:175      subgroupShuffle ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:175        Constant:
+0:175          0 (const uint)
+0:176      subgroupShuffleXor ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:176        Constant:
+0:176          1 (const uint)
+0:177      subgroupShuffleUp ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:177        Constant:
+0:177          1 (const uint)
+0:178      subgroupShuffleDown ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:178        Constant:
+0:178          1 (const uint)
+0:182  Function Definition: arith_works(vf4; ( global void)
+0:182    Function Parameters: 
+0:182      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:185      subgroupAdd ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupMul ( global 4-component vector of float)
+0:186        'f4' ( in 4-component vector of float)
+0:187      subgroupMin ( global 4-component vector of float)
+0:187        'f4' ( in 4-component vector of float)
+0:188      subgroupMax ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:189      subgroupAnd ( global 4-component vector of uint)
+0:189        'ballot' ( temp 4-component vector of uint)
+0:190      subgroupOr ( global 4-component vector of uint)
+0:190        'ballot' ( temp 4-component vector of uint)
+0:191      subgroupXor ( global 4-component vector of uint)
+0:191        'ballot' ( temp 4-component vector of uint)
+0:192      subgroupInclusiveAdd ( global 4-component vector of float)
+0:192        'f4' ( in 4-component vector of float)
+0:193      subgroupInclusiveMul ( global 4-component vector of float)
+0:193        'f4' ( in 4-component vector of float)
+0:194      subgroupInclusiveMin ( global 4-component vector of float)
+0:194        'f4' ( in 4-component vector of float)
+0:195      subgroupInclusiveMax ( global 4-component vector of float)
+0:195        'f4' ( in 4-component vector of float)
+0:196      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:196        'ballot' ( temp 4-component vector of uint)
+0:197      subgroupInclusiveOr ( global 4-component vector of uint)
+0:197        'ballot' ( temp 4-component vector of uint)
+0:198      subgroupInclusiveXor ( global 4-component vector of uint)
+0:198        'ballot' ( temp 4-component vector of uint)
+0:199      subgroupExclusiveAdd ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:200      subgroupExclusiveMul ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:201      subgroupExclusiveMin ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:202      subgroupExclusiveMax ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:203      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:203        'ballot' ( temp 4-component vector of uint)
+0:204      subgroupExclusiveOr ( global 4-component vector of uint)
+0:204        'ballot' ( temp 4-component vector of uint)
+0:205      subgroupExclusiveXor ( global 4-component vector of uint)
+0:205        'ballot' ( temp 4-component vector of uint)
+0:209  Function Definition: clustered_works(vf4; ( global void)
+0:209    Function Parameters: 
+0:209      'f4' ( in 4-component vector of float)
+0:211    Sequence
+0:211      Sequence
+0:211        move second child to first child ( temp 4-component vector of uint)
+0:211          'ballot' ( temp 4-component vector of uint)
+0:211          Constant:
+0:211            85 (const uint)
+0:211            0 (const uint)
+0:211            0 (const uint)
+0:211            0 (const uint)
+0:212      subgroupClusteredAdd ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:212        Constant:
+0:212          2 (const uint)
+0:213      subgroupClusteredMul ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:213        Constant:
+0:213          2 (const uint)
+0:214      subgroupClusteredMin ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        Constant:
+0:214          2 (const uint)
+0:215      subgroupClusteredMax ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:215        Constant:
+0:215          2 (const uint)
+0:216      subgroupClusteredAnd ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
+0:216        Constant:
+0:216          2 (const uint)
+0:217      subgroupClusteredOr ( global 4-component vector of uint)
+0:217        'ballot' ( temp 4-component vector of uint)
+0:217        Constant:
+0:217          2 (const uint)
+0:218      subgroupClusteredXor ( global 4-component vector of uint)
+0:218        'ballot' ( temp 4-component vector of uint)
+0:218        Constant:
+0:218          2 (const uint)
+0:222  Function Definition: quad_works(vf4; ( global void)
+0:222    Function Parameters: 
+0:222      'f4' ( in 4-component vector of float)
+0:224    Sequence
+0:224      subgroupQuadBroadcast ( global 4-component vector of float)
+0:224        'f4' ( in 4-component vector of float)
+0:224        Constant:
+0:224          0 (const uint)
+0:225      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
+0:226      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
+0:227      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:?     'mem' ( shared 10-element array of 4-component vector of float)
+0:?     'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+
+
+Linked task stage:
+
+
+Shader version: 460
+Requested GL_EXT_mesh_shader
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:102  Function Definition: main( ( global void)
+0:102    Function Parameters: 
+0:104    Sequence
+0:104      Sequence
+0:104        move second child to first child ( temp uint)
+0:104          'iid' ( temp uint)
+0:104          direct index ( temp uint)
+0:104            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:104            Constant:
+0:104              0 (const int)
+0:105      Sequence
+0:105        move second child to first child ( temp uint)
+0:105          'gid' ( temp uint)
+0:105          direct index ( temp uint)
+0:105            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:105            Constant:
+0:105              0 (const int)
+0:108      Sequence
+0:108        Sequence
+0:108          move second child to first child ( temp uint)
+0:108            'i' ( temp uint)
+0:108            Constant:
+0:108              0 (const uint)
+0:108        Loop with condition tested first
+0:108          Loop Condition
+0:108          Compare Less Than ( temp bool)
+0:108            'i' ( temp uint)
+0:108            Constant:
+0:108              10 (const uint)
+0:108          Loop Body
+0:109          Sequence
+0:109            move second child to first child ( temp 4-component vector of float)
+0:109              indirect index ( temp 4-component vector of float)
+0:109                'mem' ( shared 10-element array of 4-component vector of float)
+0:109                'i' ( temp uint)
+0:109              Construct vec4 ( temp 4-component vector of float)
+0:109                Convert uint to float ( temp float)
+0:109                  add ( temp uint)
+0:109                    'i' ( temp uint)
+0:109                    uni_value: direct index for structure (layout( column_major shared) uniform uint)
+0:109                      'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:109                      Constant:
+0:109                        0 (const uint)
+0:108          Loop Terminal Expression
+0:108          Pre-Increment ( temp uint)
+0:108            'i' ( temp uint)
+0:111      imageStore ( global void)
+0:111        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:111        Construct ivec2 ( temp 2-component vector of int)
+0:111          Convert uint to int ( temp int)
+0:111            'iid' ( temp uint)
+0:111        indirect index ( temp 4-component vector of float)
+0:111          'mem' ( shared 10-element array of 4-component vector of float)
+0:111          'gid' ( temp uint)
+0:112      imageStore ( global void)
+0:112        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:112        Construct ivec2 ( temp 2-component vector of int)
+0:112          Convert uint to int ( temp int)
+0:112            'iid' ( temp uint)
+0:112        indirect index ( temp 4-component vector of float)
+0:112          'mem' ( shared 10-element array of 4-component vector of float)
+0:112          add ( temp uint)
+0:112            'gid' ( temp uint)
+0:112            Constant:
+0:112              1 (const uint)
+0:114      MemoryBarrierShared ( global void)
+0:114      Barrier ( global void)
+0:118      move second child to first child ( temp 2-component vector of float)
+0:118        dummy: direct index for structure ( global 2-component vector of float)
+0:118          'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:118          Constant:
+0:118            0 (const int)
+0:118        Constant:
+0:118          30.000000
+0:118          31.000000
+0:119      move second child to first child ( temp 2-component vector of float)
+0:119        direct index ( temp 2-component vector of float)
+0:119          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:119            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:119            Constant:
+0:119              1 (const int)
+0:119          Constant:
+0:119            0 (const int)
+0:119        Constant:
+0:119          32.000000
+0:119          33.000000
+0:120      move second child to first child ( temp 2-component vector of float)
+0:120        direct index ( temp 2-component vector of float)
+0:120          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:120            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            1 (const int)
+0:120        Constant:
+0:120          34.000000
+0:120          35.000000
+0:121      move second child to first child ( temp 2-component vector of float)
+0:121        direct index ( temp 2-component vector of float)
+0:121          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:121            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:121            Constant:
+0:121              1 (const int)
+0:121          Constant:
+0:121            2 (const int)
+0:121        indirect index ( temp 2-component vector of float)
+0:121          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:121            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:121            Constant:
+0:121              1 (const int)
+0:121          mod ( temp uint)
+0:121            'gid' ( temp uint)
+0:121            Constant:
+0:121              2 (const uint)
+0:123      MemoryBarrierShared ( global void)
+0:123      Barrier ( global void)
+0:126      EmitMeshTasksEXT ( global void)
+0:126        Constant:
+0:126          3 (const uint)
+0:126        Constant:
+0:126          1 (const uint)
+0:126        Constant:
+0:126          1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:?     'mem' ( shared 10-element array of 4-component vector of float)
+0:?     'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+
diff --git a/Test/baseResults/glsl.autosampledtextures.frag.out b/Test/baseResults/glsl.autosampledtextures.frag.out
index 2183898..cbbb202 100644
--- a/Test/baseResults/glsl.autosampledtextures.frag.out
+++ b/Test/baseResults/glsl.autosampledtextures.frag.out
@@ -1,6 +1,6 @@
 glsl.autosampledtextures.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/glsl.entryPointRename.vert.bad.out b/Test/baseResults/glsl.entryPointRename.vert.bad.out
index ce34fbf..ae5de6e 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.bad.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.bad.out
@@ -2,7 +2,7 @@
 ERROR: Source entry point must be "main"
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/glsl.entryPointRename.vert.out b/Test/baseResults/glsl.entryPointRename.vert.out
index 71319c9..bc142a5 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.out
@@ -1,6 +1,6 @@
 glsl.entryPointRename.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/glsl.versionOverride.comp.out b/Test/baseResults/glsl.versionOverride.comp.out
new file mode 100644
index 0000000..591ce4d
--- /dev/null
+++ b/Test/baseResults/glsl.versionOverride.comp.out
@@ -0,0 +1 @@
+glsl.versionOverride.comp
diff --git a/Test/baseResults/glsl.versionOverride.frag.out b/Test/baseResults/glsl.versionOverride.frag.out
new file mode 100644
index 0000000..b759a47
--- /dev/null
+++ b/Test/baseResults/glsl.versionOverride.frag.out
@@ -0,0 +1 @@
+glsl.versionOverride.frag
diff --git a/Test/baseResults/glsl.versionOverride.geom.out b/Test/baseResults/glsl.versionOverride.geom.out
new file mode 100644
index 0000000..758d9d4
--- /dev/null
+++ b/Test/baseResults/glsl.versionOverride.geom.out
@@ -0,0 +1 @@
+glsl.versionOverride.geom
diff --git a/Test/baseResults/glsl.versionOverride.tesc.out b/Test/baseResults/glsl.versionOverride.tesc.out
new file mode 100644
index 0000000..4aedf0d
--- /dev/null
+++ b/Test/baseResults/glsl.versionOverride.tesc.out
@@ -0,0 +1 @@
+glsl.versionOverride.tesc
diff --git a/Test/baseResults/glsl.versionOverride.tese.out b/Test/baseResults/glsl.versionOverride.tese.out
new file mode 100644
index 0000000..c3632e8
--- /dev/null
+++ b/Test/baseResults/glsl.versionOverride.tese.out
@@ -0,0 +1 @@
+glsl.versionOverride.tese
diff --git a/Test/baseResults/glsl.versionOverride.vert.out b/Test/baseResults/glsl.versionOverride.vert.out
new file mode 100644
index 0000000..d42dc3d
--- /dev/null
+++ b/Test/baseResults/glsl.versionOverride.vert.out
@@ -0,0 +1 @@
+glsl.versionOverride.vert
diff --git a/Test/baseResults/glspv.esversion.vert.out b/Test/baseResults/glspv.esversion.vert.out
index 2a0932a..dedcae9 100644
--- a/Test/baseResults/glspv.esversion.vert.out
+++ b/Test/baseResults/glspv.esversion.vert.out
@@ -1,6 +1,6 @@
 glspv.esversion.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 10
 
                               Capability Shader
diff --git a/Test/baseResults/glspv.version.frag.out b/Test/baseResults/glspv.version.frag.out
index a90d9eb..13abe1d 100644
--- a/Test/baseResults/glspv.version.frag.out
+++ b/Test/baseResults/glspv.version.frag.out
@@ -2,7 +2,7 @@
 ERROR: #version: compilation for SPIR-V does not support the compatibility profile
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.PointSize.geom.out b/Test/baseResults/hlsl.PointSize.geom.out
index 2b3d954..c81cf5b 100644
--- a/Test/baseResults/hlsl.PointSize.geom.out
+++ b/Test/baseResults/hlsl.PointSize.geom.out
@@ -71,7 +71,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 36
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.PointSize.vert.out b/Test/baseResults/hlsl.PointSize.vert.out
index 12a4d64..5d646a4 100644
--- a/Test/baseResults/hlsl.PointSize.vert.out
+++ b/Test/baseResults/hlsl.PointSize.vert.out
@@ -38,7 +38,7 @@
 0:?     '@entryPointOutput' ( out float PointSize)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.aliasOpaque.frag.out b/Test/baseResults/hlsl.aliasOpaque.frag.out
index b7c2c9e..7bea691 100644
--- a/Test/baseResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseResults/hlsl.aliasOpaque.frag.out
@@ -143,7 +143,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
index dde6e29..b8ac133 100644
--- a/Test/baseResults/hlsl.amend.frag.out
+++ b/Test/baseResults/hlsl.amend.frag.out
@@ -160,7 +160,7 @@
 0:?     'm' ( global 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.flatten.frag.out b/Test/baseResults/hlsl.array.flatten.frag.out
index 5b99f5d..264a716 100644
--- a/Test/baseResults/hlsl.array.flatten.frag.out
+++ b/Test/baseResults/hlsl.array.flatten.frag.out
@@ -345,7 +345,7 @@
 0:?     'ps_output.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 143
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index 2691772..eab21a6 100644
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -290,7 +290,7 @@
 0:?     'input' (layout( location=1) in 3-element array of 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 126
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.implicit-size.frag.out b/Test/baseResults/hlsl.array.implicit-size.frag.out
index 566bc9d..ae36cef 100644
--- a/Test/baseResults/hlsl.array.implicit-size.frag.out
+++ b/Test/baseResults/hlsl.array.implicit-size.frag.out
@@ -163,7 +163,7 @@
 0:?     'g_mystruct' ( global 2-element array of structure{ temp int i,  temp float f})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.multidim.frag.out b/Test/baseResults/hlsl.array.multidim.frag.out
index fa2be65..7b9d962 100644
--- a/Test/baseResults/hlsl.array.multidim.frag.out
+++ b/Test/baseResults/hlsl.array.multidim.frag.out
@@ -134,7 +134,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out
index 69a631e..018da84 100644
--- a/Test/baseResults/hlsl.assoc.frag.out
+++ b/Test/baseResults/hlsl.assoc.frag.out
@@ -132,7 +132,7 @@
 0:?     'a5' (layout( location=4) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out
index 90c1740..ee183c8 100644
--- a/Test/baseResults/hlsl.attribute.expression.comp.out
+++ b/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -64,7 +64,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int bound})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attribute.frag.out b/Test/baseResults/hlsl.attribute.frag.out
index 0d1f709..cdc3471 100644
--- a/Test/baseResults/hlsl.attribute.frag.out
+++ b/Test/baseResults/hlsl.attribute.frag.out
@@ -50,7 +50,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attributeC11.frag.out b/Test/baseResults/hlsl.attributeC11.frag.out
index 1b651a3..c97c300 100644
--- a/Test/baseResults/hlsl.attributeC11.frag.out
+++ b/Test/baseResults/hlsl.attributeC11.frag.out
@@ -95,7 +95,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
index 244fe7d..4726ddd 100644
--- a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
+++ b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
@@ -56,7 +56,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.autosampledtextures.frag.out b/Test/baseResults/hlsl.autosampledtextures.frag.out
index 559c130..070af82 100644
--- a/Test/baseResults/hlsl.autosampledtextures.frag.out
+++ b/Test/baseResults/hlsl.autosampledtextures.frag.out
@@ -1,6 +1,6 @@
 hlsl.autosampledtextures.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
index d71429c..7b02d25 100644
--- a/Test/baseResults/hlsl.basic.comp.out
+++ b/Test/baseResults/hlsl.basic.comp.out
@@ -64,7 +64,7 @@
 0:?     'gti' ( in 3-component vector of int LocalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.basic.geom.out b/Test/baseResults/hlsl.basic.geom.out
index 6dea921..ef2b5ad 100644
--- a/Test/baseResults/hlsl.basic.geom.out
+++ b/Test/baseResults/hlsl.basic.geom.out
@@ -188,7 +188,7 @@
 0:?     'OutputStream.something' (layout( location=1) out int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 68
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.boolConv.vert.out b/Test/baseResults/hlsl.boolConv.vert.out
index 6a8e516..c4e3beb 100644
--- a/Test/baseResults/hlsl.boolConv.vert.out
+++ b/Test/baseResults/hlsl.boolConv.vert.out
@@ -204,7 +204,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index 04a783c..f95b839 100644
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -147,7 +147,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index d4367a0..7d896ce 100644
--- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 148
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index 8a4be02..3ce857d 100644
--- a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 148
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out
index 3efbd52..ef3957c 100644
--- a/Test/baseResults/hlsl.cast.frag.out
+++ b/Test/baseResults/hlsl.cast.frag.out
@@ -70,7 +70,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.cbuffer-identifier.vert.out b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
index 93f35d6..de9deea 100644
--- a/Test/baseResults/hlsl.cbuffer-identifier.vert.out
+++ b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
@@ -250,7 +250,7 @@
 0:?     'input.Norm' (layout( location=1) in 3-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 93
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.charLit.vert.out b/Test/baseResults/hlsl.charLit.vert.out
index 2151d43..6bde478 100644
--- a/Test/baseResults/hlsl.charLit.vert.out
+++ b/Test/baseResults/hlsl.charLit.vert.out
@@ -146,7 +146,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clip.frag.out b/Test/baseResults/hlsl.clip.frag.out
index 691b20b..32cbb8b 100644
--- a/Test/baseResults/hlsl.clip.frag.out
+++ b/Test/baseResults/hlsl.clip.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-1.frag.out b/Test/baseResults/hlsl.clipdistance-1.frag.out
index 0cfee39..2a8d8c9 100644
--- a/Test/baseResults/hlsl.clipdistance-1.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-1.frag.out
@@ -98,7 +98,7 @@
 0:?     'cull' ( in 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-1.geom.out b/Test/baseResults/hlsl.clipdistance-1.geom.out
index a9a0b82..744b192 100644
--- a/Test/baseResults/hlsl.clipdistance-1.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-1.geom.out
@@ -550,7 +550,7 @@
 0:?     'OutputStream.clip' ( out 2-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 118
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-1.vert.out b/Test/baseResults/hlsl.clipdistance-1.vert.out
index 41478e1..38d956f 100644
--- a/Test/baseResults/hlsl.clipdistance-1.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-1.vert.out
@@ -108,7 +108,7 @@
 0:?     'cull' ( out 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-2.frag.out b/Test/baseResults/hlsl.clipdistance-2.frag.out
index 15a9512..6725955 100644
--- a/Test/baseResults/hlsl.clipdistance-2.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-2.frag.out
@@ -290,7 +290,7 @@
 0:?     'cull' ( in 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-2.geom.out b/Test/baseResults/hlsl.clipdistance-2.geom.out
index bb8d137..11d5b67 100644
--- a/Test/baseResults/hlsl.clipdistance-2.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-2.geom.out
@@ -724,7 +724,7 @@
 0:?     'OutputStream.clip' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 128
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-2.vert.out b/Test/baseResults/hlsl.clipdistance-2.vert.out
index 5ccbb1e..3778ddd 100644
--- a/Test/baseResults/hlsl.clipdistance-2.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-2.vert.out
@@ -420,7 +420,7 @@
 0:?     'cull' ( out 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-3.frag.out b/Test/baseResults/hlsl.clipdistance-3.frag.out
index 1d9f54e..76525dd 100644
--- a/Test/baseResults/hlsl.clipdistance-3.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-3.frag.out
@@ -98,7 +98,7 @@
 0:?     'cull' ( in 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-3.geom.out b/Test/baseResults/hlsl.clipdistance-3.geom.out
index 5fa7df7..42ce516 100644
--- a/Test/baseResults/hlsl.clipdistance-3.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-3.geom.out
@@ -630,7 +630,7 @@
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 127
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-3.vert.out b/Test/baseResults/hlsl.clipdistance-3.vert.out
index 1882a5a..9cebfc5 100644
--- a/Test/baseResults/hlsl.clipdistance-3.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-3.vert.out
@@ -136,7 +136,7 @@
 0:?     'cull' ( out 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-4.frag.out b/Test/baseResults/hlsl.clipdistance-4.frag.out
index 5cef564..f801eb2 100644
--- a/Test/baseResults/hlsl.clipdistance-4.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-4.frag.out
@@ -174,7 +174,7 @@
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-4.geom.out b/Test/baseResults/hlsl.clipdistance-4.geom.out
index e942301..8dbe89a 100644
--- a/Test/baseResults/hlsl.clipdistance-4.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-4.geom.out
@@ -612,7 +612,7 @@
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 130
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-4.vert.out b/Test/baseResults/hlsl.clipdistance-4.vert.out
index 8e8fe6d..4c291a1 100644
--- a/Test/baseResults/hlsl.clipdistance-4.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-4.vert.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-5.frag.out b/Test/baseResults/hlsl.clipdistance-5.frag.out
index ab366e5..9d9042d 100644
--- a/Test/baseResults/hlsl.clipdistance-5.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-5.frag.out
@@ -232,7 +232,7 @@
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-5.vert.out b/Test/baseResults/hlsl.clipdistance-5.vert.out
index 6dbe0a6..deb6ad8 100644
--- a/Test/baseResults/hlsl.clipdistance-5.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-5.vert.out
@@ -318,7 +318,7 @@
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-6.frag.out b/Test/baseResults/hlsl.clipdistance-6.frag.out
index 770f990..99798d3 100644
--- a/Test/baseResults/hlsl.clipdistance-6.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-6.frag.out
@@ -282,7 +282,7 @@
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 79
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-6.vert.out b/Test/baseResults/hlsl.clipdistance-6.vert.out
index 1adbdfc..389f867 100644
--- a/Test/baseResults/hlsl.clipdistance-6.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-6.vert.out
@@ -428,7 +428,7 @@
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 86
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-7.frag.out b/Test/baseResults/hlsl.clipdistance-7.frag.out
index 9f5e519..9b8c655 100644
--- a/Test/baseResults/hlsl.clipdistance-7.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-7.frag.out
@@ -270,7 +270,7 @@
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-7.vert.out b/Test/baseResults/hlsl.clipdistance-7.vert.out
index 13bc844..55a16c1 100644
--- a/Test/baseResults/hlsl.clipdistance-7.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-7.vert.out
@@ -384,7 +384,7 @@
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 81
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-8.frag.out b/Test/baseResults/hlsl.clipdistance-8.frag.out
index 8f2a9c2..ed82cfd 100644
--- a/Test/baseResults/hlsl.clipdistance-8.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-8.frag.out
@@ -186,7 +186,7 @@
 0:?     'v.clip1' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-8.vert.out b/Test/baseResults/hlsl.clipdistance-8.vert.out
index fbc2c2a..9df6618 100644
--- a/Test/baseResults/hlsl.clipdistance-8.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-8.vert.out
@@ -240,7 +240,7 @@
 0:?     '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-9.frag.out b/Test/baseResults/hlsl.clipdistance-9.frag.out
index b42727f..9c62b34 100644
--- a/Test/baseResults/hlsl.clipdistance-9.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-9.frag.out
@@ -144,7 +144,7 @@
 0:?     'clip0' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 68
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-9.vert.out b/Test/baseResults/hlsl.clipdistance-9.vert.out
index 7df3064..4e997c6 100644
--- a/Test/baseResults/hlsl.clipdistance-9.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-9.vert.out
@@ -194,7 +194,7 @@
 0:?     'clip0' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 67
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.color.hull.tesc.out b/Test/baseResults/hlsl.color.hull.tesc.out
index e3c0a3e..7a1f830 100644
--- a/Test/baseResults/hlsl.color.hull.tesc.out
+++ b/Test/baseResults/hlsl.color.hull.tesc.out
@@ -530,7 +530,7 @@
 0:?     '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 159
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out
index 9fec433..720aea2 100644
--- a/Test/baseResults/hlsl.comparison.vec.frag.out
+++ b/Test/baseResults/hlsl.comparison.vec.frag.out
@@ -262,7 +262,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
index 99f2538..e160681 100644
--- a/Test/baseResults/hlsl.conditional.frag.out
+++ b/Test/baseResults/hlsl.conditional.frag.out
@@ -522,7 +522,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 206
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constantbuffer.frag.out b/Test/baseResults/hlsl.constantbuffer.frag.out
index 12e819b..78ad577 100644
--- a/Test/baseResults/hlsl.constantbuffer.frag.out
+++ b/Test/baseResults/hlsl.constantbuffer.frag.out
@@ -133,7 +133,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructArray.vert.out b/Test/baseResults/hlsl.constructArray.vert.out
index b070735..230efbc 100644
--- a/Test/baseResults/hlsl.constructArray.vert.out
+++ b/Test/baseResults/hlsl.constructArray.vert.out
@@ -268,7 +268,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructexpr.frag.out b/Test/baseResults/hlsl.constructexpr.frag.out
index 7b25ae8..367a03a 100644
--- a/Test/baseResults/hlsl.constructexpr.frag.out
+++ b/Test/baseResults/hlsl.constructexpr.frag.out
@@ -104,7 +104,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructimat.frag.out b/Test/baseResults/hlsl.constructimat.frag.out
index a76ac6a..4f49b87 100644
--- a/Test/baseResults/hlsl.constructimat.frag.out
+++ b/Test/baseResults/hlsl.constructimat.frag.out
@@ -545,7 +545,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.coverage.frag.out b/Test/baseResults/hlsl.coverage.frag.out
index 7c44e1f..681118f 100644
--- a/Test/baseResults/hlsl.coverage.frag.out
+++ b/Test/baseResults/hlsl.coverage.frag.out
@@ -119,7 +119,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.dashI.vert.out b/Test/baseResults/hlsl.dashI.vert.out
index 7351443..ccd530a 100644
--- a/Test/baseResults/hlsl.dashI.vert.out
+++ b/Test/baseResults/hlsl.dashI.vert.out
@@ -1,6 +1,6 @@
 hlsl.dashI.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
index 9ca0146..1862266 100644
--- a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
+++ b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
@@ -1,6 +1,6 @@
 hlsl.deadFunctionMissingBody.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.depthGreater.frag.out b/Test/baseResults/hlsl.depthGreater.frag.out
index 31a7006..5128a0e 100644
--- a/Test/baseResults/hlsl.depthGreater.frag.out
+++ b/Test/baseResults/hlsl.depthGreater.frag.out
@@ -50,7 +50,7 @@
 0:?     'depth' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.depthLess.frag.out b/Test/baseResults/hlsl.depthLess.frag.out
index d062c77..771c477 100644
--- a/Test/baseResults/hlsl.depthLess.frag.out
+++ b/Test/baseResults/hlsl.depthLess.frag.out
@@ -42,7 +42,7 @@
 0:?     '@entryPointOutput' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.discard.frag.out b/Test/baseResults/hlsl.discard.frag.out
index 41766f6..7a6c6f2 100644
--- a/Test/baseResults/hlsl.discard.frag.out
+++ b/Test/baseResults/hlsl.discard.frag.out
@@ -108,7 +108,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out
index 0d93e8d..82a96b5 100644
--- a/Test/baseResults/hlsl.doLoop.frag.out
+++ b/Test/baseResults/hlsl.doLoop.frag.out
@@ -198,7 +198,7 @@
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.domain.1.tese.out b/Test/baseResults/hlsl.domain.1.tese.out
index 4e53e7c..738f7cd 100644
--- a/Test/baseResults/hlsl.domain.1.tese.out
+++ b/Test/baseResults/hlsl.domain.1.tese.out
@@ -428,7 +428,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 125
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.2.tese.out b/Test/baseResults/hlsl.domain.2.tese.out
index 05f934f..ddb176a 100644
--- a/Test/baseResults/hlsl.domain.2.tese.out
+++ b/Test/baseResults/hlsl.domain.2.tese.out
@@ -426,7 +426,7 @@
 0:?     'pcf_data.foo' (layout( location=2) patch in float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 120
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.3.tese.out b/Test/baseResults/hlsl.domain.3.tese.out
index c9b985d..1dc7b2f 100644
--- a/Test/baseResults/hlsl.domain.3.tese.out
+++ b/Test/baseResults/hlsl.domain.3.tese.out
@@ -358,7 +358,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 116
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.earlydepthstencil.frag.out b/Test/baseResults/hlsl.earlydepthstencil.frag.out
index 34ca006..a629bdc 100644
--- a/Test/baseResults/hlsl.earlydepthstencil.frag.out
+++ b/Test/baseResults/hlsl.earlydepthstencil.frag.out
@@ -108,7 +108,7 @@
 0:?     'input.Position' ( in 4-component vector of float FragCoord)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystruct.init.vert.out b/Test/baseResults/hlsl.emptystruct.init.vert.out
index 9f5c785..07baddf 100644
--- a/Test/baseResults/hlsl.emptystruct.init.vert.out
+++ b/Test/baseResults/hlsl.emptystruct.init.vert.out
@@ -60,7 +60,7 @@
 0:?     'vertexIndex' (layout( location=0) in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystructreturn.frag.out b/Test/baseResults/hlsl.emptystructreturn.frag.out
index 2a4cabe..de77486 100644
--- a/Test/baseResults/hlsl.emptystructreturn.frag.out
+++ b/Test/baseResults/hlsl.emptystructreturn.frag.out
@@ -51,7 +51,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystructreturn.vert.out b/Test/baseResults/hlsl.emptystructreturn.vert.out
index ad1efa7..22dc2cf 100644
--- a/Test/baseResults/hlsl.emptystructreturn.vert.out
+++ b/Test/baseResults/hlsl.emptystructreturn.vert.out
@@ -49,7 +49,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry-in.frag.out b/Test/baseResults/hlsl.entry-in.frag.out
index 4c32249..e86def4 100644
--- a/Test/baseResults/hlsl.entry-in.frag.out
+++ b/Test/baseResults/hlsl.entry-in.frag.out
@@ -166,7 +166,7 @@
 0:?     'i.i2' (layout( location=1) flat in 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 74
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry-out.frag.out b/Test/baseResults/hlsl.entry-out.frag.out
index a8b47e9..5f162b1 100644
--- a/Test/baseResults/hlsl.entry-out.frag.out
+++ b/Test/baseResults/hlsl.entry-out.frag.out
@@ -244,7 +244,7 @@
 0:?     'out3.i' (layout( location=5) out 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry.rename.frag.out b/Test/baseResults/hlsl.entry.rename.frag.out
index 2fd15d1..d635c67 100644
--- a/Test/baseResults/hlsl.entry.rename.frag.out
+++ b/Test/baseResults/hlsl.entry.rename.frag.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
index 3ca773f..5c89f7e 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
index 9ba0d93..1b0e45f 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flatten.return.frag.out b/Test/baseResults/hlsl.flatten.return.frag.out
index 9a51f1f..f276462 100644
--- a/Test/baseResults/hlsl.flatten.return.frag.out
+++ b/Test/baseResults/hlsl.flatten.return.frag.out
@@ -118,7 +118,7 @@
 0:?     '@entryPointOutput.other_struct_member3' (layout( location=3) out float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaque.frag.out b/Test/baseResults/hlsl.flattenOpaque.frag.out
index 9a29081..589b1e1 100644
--- a/Test/baseResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseResults/hlsl.flattenOpaque.frag.out
@@ -295,7 +295,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 122
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
index 10e8345..dbd6446 100644
--- a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
@@ -165,7 +165,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 82
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
index c8d0b16..66084f6 100644
--- a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -107,7 +107,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 59
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenSubset.frag.out b/Test/baseResults/hlsl.flattenSubset.frag.out
index 7ec229a..65d3467 100644
--- a/Test/baseResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset.frag.out
@@ -115,7 +115,7 @@
 0:?     'vpos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out
index c319637..c8a9193 100644
--- a/Test/baseResults/hlsl.flattenSubset2.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset2.frag.out
@@ -149,7 +149,7 @@
 0:?     'vpos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out
index 00bdea9..65f69da 100644
--- a/Test/baseResults/hlsl.float1.frag.out
+++ b/Test/baseResults/hlsl.float1.frag.out
@@ -65,7 +65,7 @@
 0:?     'scalar' ( global float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
index 0dbd935..5fcc3c1 100644
--- a/Test/baseResults/hlsl.float4.frag.out
+++ b/Test/baseResults/hlsl.float4.frag.out
@@ -42,7 +42,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform bool ff1, layout( offset=20) uniform float ff2, layout( binding=0 offset=32) uniform 4-component vector of float ff3, layout( binding=1 offset=48) uniform 4-component vector of float ff4})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.forLoop.frag.out b/Test/baseResults/hlsl.forLoop.frag.out
index 7bce346..f1aa20b 100644
--- a/Test/baseResults/hlsl.forLoop.frag.out
+++ b/Test/baseResults/hlsl.forLoop.frag.out
@@ -510,7 +510,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 240
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.format.rwtexture.frag.out b/Test/baseResults/hlsl.format.rwtexture.frag.out
index e6eebbf..3edbbb6 100644
--- a/Test/baseResults/hlsl.format.rwtexture.frag.out
+++ b/Test/baseResults/hlsl.format.rwtexture.frag.out
@@ -184,7 +184,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 160
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.fraggeom.frag.out b/Test/baseResults/hlsl.fraggeom.frag.out
index d86fa96..400f530 100644
--- a/Test/baseResults/hlsl.fraggeom.frag.out
+++ b/Test/baseResults/hlsl.fraggeom.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out
index e39d5a2..13b7ebb 100644
--- a/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -262,7 +262,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 124
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 99efd61..0aa00f7 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -258,7 +258,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 135
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index 96525e0..d743074 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -220,7 +220,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 126
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index 59bd8da..9656db5 100644
--- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -208,7 +208,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 114
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index 942bd92..2e6221a 100644
--- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -202,7 +202,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 97
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index 75ea036..904aaec 100644
--- a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -750,7 +750,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 255
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index 886ad73..f8fa2f4 100644
--- a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -758,7 +758,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 265
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index b86cd22..63cb39f 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -1263,7 +1263,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 399
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index 1fa728a..da83e01 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -1255,7 +1255,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 389
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
index a858f15..ff834ec 100644
--- a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
@@ -456,7 +456,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 164
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index ba02359..9e1d543 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -2318,7 +2318,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 550
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index 96a1cc1..a7d27a8 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
@@ -116,7 +116,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
index 1cce0cc..7af13b2 100644
--- a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -718,7 +718,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 232
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index 5c49931..f08a91c 100644
--- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -580,7 +580,7 @@
 0:?     'sample' (layout( location=0) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.global-const-init.frag.out b/Test/baseResults/hlsl.global-const-init.frag.out
index 26895bb..0510b3e 100644
--- a/Test/baseResults/hlsl.global-const-init.frag.out
+++ b/Test/baseResults/hlsl.global-const-init.frag.out
@@ -102,7 +102,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.groupid.comp.out b/Test/baseResults/hlsl.groupid.comp.out
index bf39d11..39c5fed 100644
--- a/Test/baseResults/hlsl.groupid.comp.out
+++ b/Test/baseResults/hlsl.groupid.comp.out
@@ -82,7 +82,7 @@
 0:?     'vGroupId' ( in 3-component vector of uint WorkGroupID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gs-hs-mix.tesc.out b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
index c9496ac..5071a47 100644
--- a/Test/baseResults/hlsl.gs-hs-mix.tesc.out
+++ b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
@@ -986,7 +986,7 @@
 0:?     '@patchConstantOutput.NormalWS[2]' (layout( location=3) patch out 3-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 236
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hlslOffset.vert.out b/Test/baseResults/hlsl.hlslOffset.vert.out
index 09545c8..0f7b09b 100644
--- a/Test/baseResults/hlsl.hlslOffset.vert.out
+++ b/Test/baseResults/hlsl.hlslOffset.vert.out
@@ -26,7 +26,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float m0, layout( row_major std140) uniform 3-component vector of float m4, layout( row_major std140) uniform float m16, layout( row_major std140 offset=20) uniform 3-component vector of float m20, layout( row_major std140 offset=36) uniform 3-component vector of float m36, layout( row_major std140 offset=56) uniform 2-component vector of float m56, layout( row_major std140) uniform float m64, layout( row_major std140) uniform 2-component vector of float m68, layout( row_major std140) uniform float m76, layout( row_major std140) uniform float m80, layout( row_major std140) uniform 1-element array of 2-component vector of float m96})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.hull.1.tesc.out b/Test/baseResults/hlsl.hull.1.tesc.out
index cba0f8b..4188942 100644
--- a/Test/baseResults/hlsl.hull.1.tesc.out
+++ b/Test/baseResults/hlsl.hull.1.tesc.out
@@ -324,7 +324,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 104
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.2.tesc.out b/Test/baseResults/hlsl.hull.2.tesc.out
index 4e8a50c..0d08b68 100644
--- a/Test/baseResults/hlsl.hull.2.tesc.out
+++ b/Test/baseResults/hlsl.hull.2.tesc.out
@@ -320,7 +320,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 106
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out
index f40a79e..808edd3 100644
--- a/Test/baseResults/hlsl.hull.3.tesc.out
+++ b/Test/baseResults/hlsl.hull.3.tesc.out
@@ -320,7 +320,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 106
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.4.tesc.out b/Test/baseResults/hlsl.hull.4.tesc.out
index aa766ed..bffc464 100644
--- a/Test/baseResults/hlsl.hull.4.tesc.out
+++ b/Test/baseResults/hlsl.hull.4.tesc.out
@@ -458,7 +458,7 @@
 0:?     '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 124
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.6.tesc.out b/Test/baseResults/hlsl.hull.6.tesc.out
index efb6e5b..b673a8c 100644
--- a/Test/baseResults/hlsl.hull.6.tesc.out
+++ b/Test/baseResults/hlsl.hull.6.tesc.out
@@ -450,7 +450,7 @@
 0:?     '@patchConstantOutput.Edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 142
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
index 70881e9..4e706c0 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
@@ -472,7 +472,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 135
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
index d59e163..fd7cf0b 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
@@ -490,7 +490,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 137
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.void.tesc.out b/Test/baseResults/hlsl.hull.void.tesc.out
index 2249360..244d1fc 100644
--- a/Test/baseResults/hlsl.hull.void.tesc.out
+++ b/Test/baseResults/hlsl.hull.void.tesc.out
@@ -184,7 +184,7 @@
 0:?     'InvocationId' ( in uint InvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 67
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out
index e0a89aa..bde7fdb 100644
--- a/Test/baseResults/hlsl.identifier.sample.frag.out
+++ b/Test/baseResults/hlsl.identifier.sample.frag.out
@@ -86,7 +86,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out
index e77c7ac..fafad92 100644
--- a/Test/baseResults/hlsl.if.frag.out
+++ b/Test/baseResults/hlsl.if.frag.out
@@ -240,7 +240,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 117
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
index ff201eb..6573820 100644
--- a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
+++ b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
@@ -410,7 +410,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 186
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.imageload-subvec4.comp.out b/Test/baseResults/hlsl.imageload-subvec4.comp.out
index 4d038a1..d54075f 100644
--- a/Test/baseResults/hlsl.imageload-subvec4.comp.out
+++ b/Test/baseResults/hlsl.imageload-subvec4.comp.out
@@ -266,7 +266,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 138
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out
index dd93b7f..381e835 100644
--- a/Test/baseResults/hlsl.implicitBool.frag.out
+++ b/Test/baseResults/hlsl.implicitBool.frag.out
@@ -332,7 +332,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 139
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.include.vert.out b/Test/baseResults/hlsl.include.vert.out
index f46658d..95a5b90 100644
--- a/Test/baseResults/hlsl.include.vert.out
+++ b/Test/baseResults/hlsl.include.vert.out
@@ -1,6 +1,6 @@
 ../Test/hlsl.include.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.inf.vert.out b/Test/baseResults/hlsl.inf.vert.out
index bb9a184..50f6d56 100644
--- a/Test/baseResults/hlsl.inf.vert.out
+++ b/Test/baseResults/hlsl.inf.vert.out
@@ -112,7 +112,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
index f604f0a..35a89f0 100644
--- a/Test/baseResults/hlsl.init.frag.out
+++ b/Test/baseResults/hlsl.init.frag.out
@@ -331,7 +331,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float a, layout( row_major std140) uniform float b, layout( row_major std140) uniform float c})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 110
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.init2.frag.out b/Test/baseResults/hlsl.init2.frag.out
index 5039333..b8b7afc 100644
--- a/Test/baseResults/hlsl.init2.frag.out
+++ b/Test/baseResults/hlsl.init2.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 112
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.inoutquals.frag.out b/Test/baseResults/hlsl.inoutquals.frag.out
index 25186cb..931208b 100644
--- a/Test/baseResults/hlsl.inoutquals.frag.out
+++ b/Test/baseResults/hlsl.inoutquals.frag.out
@@ -214,7 +214,7 @@
 0:?     'sampleMask' ( out 1-element array of int SampleMaskIn)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 92
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.instance.geom.out b/Test/baseResults/hlsl.instance.geom.out
new file mode 100644
index 0000000..f2299ee
--- /dev/null
+++ b/Test/baseResults/hlsl.instance.geom.out
@@ -0,0 +1,433 @@
+hlsl.instance.geom
+Shader version: 500
+invocations = 5
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:10  Function Definition: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void)
+0:10    Function Parameters: 
+0:10      'input' ( in 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10      'output' ( out structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10      'id' ( in uint)
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child ( temp int)
+0:12          'i' ( temp int)
+0:12          Constant:
+0:12            0 (const int)
+0:12        Loop with condition tested first: DontUnroll
+0:12          Loop Condition
+0:12          Compare Less Than ( temp bool)
+0:12            'i' ( temp int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          Loop Body
+0:?           Sequence
+0:14            Sequence
+0:14              Sequence
+0:14                move second child to first child ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                  'flattenTemp' ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                  indirect index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                    'input' ( in 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                    'i' ( temp int)
+0:14                move second child to first child ( temp 4-component vector of float)
+0:?                   'output.m_position' ( out 4-component vector of float Position)
+0:14                  m_position: direct index for structure ( temp 4-component vector of float)
+0:14                    'flattenTemp' ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                    Constant:
+0:14                      0 (const int)
+0:14                move second child to first child ( temp 4-component vector of float)
+0:?                   'output.m_color' (layout( location=0) out 4-component vector of float)
+0:14                  m_color: direct index for structure ( temp 4-component vector of float)
+0:14                    'flattenTemp' ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                    Constant:
+0:14                      1 (const int)
+0:14              EmitVertex ( temp void)
+0:12          Loop Terminal Expression
+0:12          Pre-Increment ( temp int)
+0:12            'i' ( temp int)
+0:16      EndPrimitive ( temp void)
+0:10  Function Definition: GeometryShader( ( temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_position: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                0 (const int)
+0:10            Constant:
+0:10              0 (const int)
+0:10          direct index ( in 4-component vector of float Position)
+0:?             'input.m_position' ( in 3-element array of 4-component vector of float Position)
+0:10            Constant:
+0:10              0 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_color: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                0 (const int)
+0:10            Constant:
+0:10              1 (const int)
+0:10          direct index (layout( location=0) in 4-component vector of float)
+0:?             'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float)
+0:10            Constant:
+0:10              0 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_position: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                1 (const int)
+0:10            Constant:
+0:10              0 (const int)
+0:10          direct index ( in 4-component vector of float Position)
+0:?             'input.m_position' ( in 3-element array of 4-component vector of float Position)
+0:10            Constant:
+0:10              1 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_color: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                1 (const int)
+0:10            Constant:
+0:10              1 (const int)
+0:10          direct index (layout( location=0) in 4-component vector of float)
+0:?             'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float)
+0:10            Constant:
+0:10              1 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_position: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                2 (const int)
+0:10            Constant:
+0:10              0 (const int)
+0:10          direct index ( in 4-component vector of float Position)
+0:?             'input.m_position' ( in 3-element array of 4-component vector of float Position)
+0:10            Constant:
+0:10              2 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_color: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                2 (const int)
+0:10            Constant:
+0:10              1 (const int)
+0:10          direct index (layout( location=0) in 4-component vector of float)
+0:?             'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float)
+0:10            Constant:
+0:10              2 (const int)
+0:10      move second child to first child ( temp uint)
+0:?         'id' ( temp uint)
+0:?         'id' ( in uint InvocationID)
+0:10      Function Call: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void)
+0:?         'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?         'output' ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?         'id' ( temp uint)
+0:?   Linker Objects
+0:?     'input.m_position' ( in 3-element array of 4-component vector of float Position)
+0:?     'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float)
+0:?     'id' ( in uint InvocationID)
+0:?     'output.m_position' ( out 4-component vector of float Position)
+0:?     'output.m_color' (layout( location=0) out 4-component vector of float)
+
+
+Linked geometry stage:
+
+
+Shader version: 500
+invocations = 5
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:10  Function Definition: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void)
+0:10    Function Parameters: 
+0:10      'input' ( in 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10      'output' ( out structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10      'id' ( in uint)
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child ( temp int)
+0:12          'i' ( temp int)
+0:12          Constant:
+0:12            0 (const int)
+0:12        Loop with condition tested first: DontUnroll
+0:12          Loop Condition
+0:12          Compare Less Than ( temp bool)
+0:12            'i' ( temp int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          Loop Body
+0:?           Sequence
+0:14            Sequence
+0:14              Sequence
+0:14                move second child to first child ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                  'flattenTemp' ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                  indirect index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                    'input' ( in 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                    'i' ( temp int)
+0:14                move second child to first child ( temp 4-component vector of float)
+0:?                   'output.m_position' ( out 4-component vector of float Position)
+0:14                  m_position: direct index for structure ( temp 4-component vector of float)
+0:14                    'flattenTemp' ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                    Constant:
+0:14                      0 (const int)
+0:14                move second child to first child ( temp 4-component vector of float)
+0:?                   'output.m_color' (layout( location=0) out 4-component vector of float)
+0:14                  m_color: direct index for structure ( temp 4-component vector of float)
+0:14                    'flattenTemp' ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:14                    Constant:
+0:14                      1 (const int)
+0:14              EmitVertex ( temp void)
+0:12          Loop Terminal Expression
+0:12          Pre-Increment ( temp int)
+0:12            'i' ( temp int)
+0:16      EndPrimitive ( temp void)
+0:10  Function Definition: GeometryShader( ( temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_position: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                0 (const int)
+0:10            Constant:
+0:10              0 (const int)
+0:10          direct index ( in 4-component vector of float Position)
+0:?             'input.m_position' ( in 3-element array of 4-component vector of float Position)
+0:10            Constant:
+0:10              0 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_color: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                0 (const int)
+0:10            Constant:
+0:10              1 (const int)
+0:10          direct index (layout( location=0) in 4-component vector of float)
+0:?             'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float)
+0:10            Constant:
+0:10              0 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_position: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                1 (const int)
+0:10            Constant:
+0:10              0 (const int)
+0:10          direct index ( in 4-component vector of float Position)
+0:?             'input.m_position' ( in 3-element array of 4-component vector of float Position)
+0:10            Constant:
+0:10              1 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_color: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                1 (const int)
+0:10            Constant:
+0:10              1 (const int)
+0:10          direct index (layout( location=0) in 4-component vector of float)
+0:?             'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float)
+0:10            Constant:
+0:10              1 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_position: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                2 (const int)
+0:10            Constant:
+0:10              0 (const int)
+0:10          direct index ( in 4-component vector of float Position)
+0:?             'input.m_position' ( in 3-element array of 4-component vector of float Position)
+0:10            Constant:
+0:10              2 (const int)
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          m_color: direct index for structure ( temp 4-component vector of float)
+0:10            direct index ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?               'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:10              Constant:
+0:10                2 (const int)
+0:10            Constant:
+0:10              1 (const int)
+0:10          direct index (layout( location=0) in 4-component vector of float)
+0:?             'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float)
+0:10            Constant:
+0:10              2 (const int)
+0:10      move second child to first child ( temp uint)
+0:?         'id' ( temp uint)
+0:?         'id' ( in uint InvocationID)
+0:10      Function Call: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void)
+0:?         'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?         'output' ( temp structure{ temp 4-component vector of float m_position,  temp 4-component vector of float m_color})
+0:?         'id' ( temp uint)
+0:?   Linker Objects
+0:?     'input.m_position' ( in 3-element array of 4-component vector of float Position)
+0:?     'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float)
+0:?     'id' ( in uint InvocationID)
+0:?     'output.m_position' ( out 4-component vector of float Position)
+0:?     'output.m_color' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 86
+
+                              Capability Geometry
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "GeometryShader" 39 43 52 57 76
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 5
+                              ExecutionMode 4 OutputTriangleStrip
+                              ExecutionMode 4 OutputVertices 3
+                              Source HLSL 500
+                              Name 4  "GeometryShader"
+                              Name 8  "VertexShaderOutput"
+                              MemberName 8(VertexShaderOutput) 0  "m_position"
+                              MemberName 8(VertexShaderOutput) 1  "m_color"
+                              Name 19  "@GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1;"
+                              Name 16  "input"
+                              Name 17  "output"
+                              Name 18  "id"
+                              Name 23  "i"
+                              Name 34  "flattenTemp"
+                              Name 39  "output.m_position"
+                              Name 43  "output.m_color"
+                              Name 49  "input"
+                              Name 52  "input.m_position"
+                              Name 57  "input.m_color"
+                              Name 74  "id"
+                              Name 76  "id"
+                              Name 78  "output"
+                              Name 79  "param"
+                              Name 81  "param"
+                              Name 82  "param"
+                              Decorate 39(output.m_position) BuiltIn Position
+                              Decorate 43(output.m_color) Location 0
+                              Decorate 52(input.m_position) BuiltIn Position
+                              Decorate 57(input.m_color) Location 0
+                              Decorate 76(id) BuiltIn InvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+8(VertexShaderOutput):             TypeStruct 7(fvec4) 7(fvec4)
+               9:             TypeInt 32 0
+              10:      9(int) Constant 3
+              11:             TypeArray 8(VertexShaderOutput) 10
+              12:             TypePointer Function 11
+              13:             TypePointer Function 8(VertexShaderOutput)
+              14:             TypePointer Function 9(int)
+              15:             TypeFunction 2 12(ptr) 13(ptr) 14(ptr)
+              21:             TypeInt 32 1
+              22:             TypePointer Function 21(int)
+              24:     21(int) Constant 0
+              31:     21(int) Constant 3
+              32:             TypeBool
+              38:             TypePointer Output 7(fvec4)
+39(output.m_position):     38(ptr) Variable Output
+              40:             TypePointer Function 7(fvec4)
+43(output.m_color):     38(ptr) Variable Output
+              44:     21(int) Constant 1
+              50:             TypeArray 7(fvec4) 10
+              51:             TypePointer Input 50
+52(input.m_position):     51(ptr) Variable Input
+              53:             TypePointer Input 7(fvec4)
+57(input.m_color):     51(ptr) Variable Input
+              67:     21(int) Constant 2
+              75:             TypePointer Input 9(int)
+          76(id):     75(ptr) Variable Input
+4(GeometryShader):           2 Function None 3
+               5:             Label
+       49(input):     12(ptr) Variable Function
+          74(id):     14(ptr) Variable Function
+      78(output):     13(ptr) Variable Function
+       79(param):     12(ptr) Variable Function
+       81(param):     13(ptr) Variable Function
+       82(param):     14(ptr) Variable Function
+              54:     53(ptr) AccessChain 52(input.m_position) 24
+              55:    7(fvec4) Load 54
+              56:     40(ptr) AccessChain 49(input) 24 24
+                              Store 56 55
+              58:     53(ptr) AccessChain 57(input.m_color) 24
+              59:    7(fvec4) Load 58
+              60:     40(ptr) AccessChain 49(input) 24 44
+                              Store 60 59
+              61:     53(ptr) AccessChain 52(input.m_position) 44
+              62:    7(fvec4) Load 61
+              63:     40(ptr) AccessChain 49(input) 44 24
+                              Store 63 62
+              64:     53(ptr) AccessChain 57(input.m_color) 44
+              65:    7(fvec4) Load 64
+              66:     40(ptr) AccessChain 49(input) 44 44
+                              Store 66 65
+              68:     53(ptr) AccessChain 52(input.m_position) 67
+              69:    7(fvec4) Load 68
+              70:     40(ptr) AccessChain 49(input) 67 24
+                              Store 70 69
+              71:     53(ptr) AccessChain 57(input.m_color) 67
+              72:    7(fvec4) Load 71
+              73:     40(ptr) AccessChain 49(input) 67 44
+                              Store 73 72
+              77:      9(int) Load 76(id)
+                              Store 74(id) 77
+              80:          11 Load 49(input)
+                              Store 79(param) 80
+              83:      9(int) Load 74(id)
+                              Store 82(param) 83
+              84:           2 FunctionCall 19(@GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1;) 79(param) 81(param) 82(param)
+              85:8(VertexShaderOutput) Load 81(param)
+                              Store 78(output) 85
+                              Return
+                              FunctionEnd
+19(@GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1;):           2 Function None 15
+       16(input):     12(ptr) FunctionParameter
+      17(output):     13(ptr) FunctionParameter
+          18(id):     14(ptr) FunctionParameter
+              20:             Label
+           23(i):     22(ptr) Variable Function
+ 34(flattenTemp):     13(ptr) Variable Function
+                              Store 23(i) 24
+                              Branch 25
+              25:             Label
+                              LoopMerge 27 28 DontUnroll 
+                              Branch 29
+              29:             Label
+              30:     21(int) Load 23(i)
+              33:    32(bool) SLessThan 30 31
+                              BranchConditional 33 26 27
+              26:               Label
+              35:     21(int)   Load 23(i)
+              36:     13(ptr)   AccessChain 16(input) 35
+              37:8(VertexShaderOutput)   Load 36
+                                Store 34(flattenTemp) 37
+              41:     40(ptr)   AccessChain 34(flattenTemp) 24
+              42:    7(fvec4)   Load 41
+                                Store 39(output.m_position) 42
+              45:     40(ptr)   AccessChain 34(flattenTemp) 44
+              46:    7(fvec4)   Load 45
+                                Store 43(output.m_color) 46
+                                EmitVertex
+                                Branch 28
+              28:               Label
+              47:     21(int)   Load 23(i)
+              48:     21(int)   IAdd 47 44
+                                Store 23(i) 48
+                                Branch 25
+              27:             Label
+                              EndPrimitive
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.int.dot.frag.out b/Test/baseResults/hlsl.int.dot.frag.out
index 3272cb4..5c7edbb 100644
--- a/Test/baseResults/hlsl.int.dot.frag.out
+++ b/Test/baseResults/hlsl.int.dot.frag.out
@@ -224,7 +224,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.frag.out b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
index 1595a60..c0c9109 100644
--- a/Test/baseResults/hlsl.intrinsic.frexp.frag.out
+++ b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
@@ -190,7 +190,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.vert.out b/Test/baseResults/hlsl.intrinsic.frexp.vert.out
index 0418ed6..41bb429 100644
--- a/Test/baseResults/hlsl.intrinsic.frexp.vert.out
+++ b/Test/baseResults/hlsl.intrinsic.frexp.vert.out
@@ -113,7 +113,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
index abb9650..4dfe8e0 100644
--- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
@@ -40,7 +40,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index bce3d14..56752af 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -717,7 +717,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 265
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
index b0eeaa9..75a66d6 100644
--- a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.double.frag.out b/Test/baseResults/hlsl.intrinsics.double.frag.out
index 8444e20..d87fd2f 100644
--- a/Test/baseResults/hlsl.intrinsics.double.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.double.frag.out
@@ -164,7 +164,7 @@
 0:?     'inU1b' (layout( location=9) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
index 90a4b98..52bbc4f 100644
--- a/Test/baseResults/hlsl.intrinsics.f1632.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.f3216.frag.out b/Test/baseResults/hlsl.intrinsics.f3216.frag.out
index ddf9a70..c9a94b8 100644
--- a/Test/baseResults/hlsl.intrinsics.f3216.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f3216.frag.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out
index 02b1e6d..38857f8 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -5659,7 +5659,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 1839
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.lit.frag.out b/Test/baseResults/hlsl.intrinsics.lit.frag.out
index ef5759e..8307db5 100644
--- a/Test/baseResults/hlsl.intrinsics.lit.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.lit.frag.out
@@ -118,7 +118,7 @@
 0:?     'm' (layout( location=2) in float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out
index c0a543c..6ea121a 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out
@@ -122,7 +122,7 @@
 0:?     'inI0' (layout( location=3) in 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 79
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.negative.vert.out b/Test/baseResults/hlsl.intrinsics.negative.vert.out
index f1ab582..9044abd 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.vert.out
@@ -308,7 +308,7 @@
 0:?     'inI0' (layout( location=3) in 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
index bd73fae..c68fc96 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
@@ -104,7 +104,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.frag.out b/Test/baseResults/hlsl.intrinsics.promote.frag.out
index 18fd037..99176f1 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -888,7 +888,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 322
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
index 1abed4c..e0fbfe6 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -204,7 +204,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out
index 647570c..611ff16 100644
--- a/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.vert.out
@@ -2780,7 +2780,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 1225
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.isfinite.frag.out b/Test/baseResults/hlsl.isfinite.frag.out
index 430ff06..e46e771 100644
--- a/Test/baseResults/hlsl.isfinite.frag.out
+++ b/Test/baseResults/hlsl.isfinite.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 85
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out
index 9007e93..b2306d0 100644
--- a/Test/baseResults/hlsl.layout.frag.out
+++ b/Test/baseResults/hlsl.layout.frag.out
@@ -88,7 +88,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.layoutOverride.vert.out b/Test/baseResults/hlsl.layoutOverride.vert.out
index a3b8960..80c3e45 100644
--- a/Test/baseResults/hlsl.layoutOverride.vert.out
+++ b/Test/baseResults/hlsl.layoutOverride.vert.out
@@ -52,7 +52,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index daa28b2..09086cb 100644
--- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -336,7 +336,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 129
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
index 0440779..96792a9 100644
--- a/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -388,7 +388,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 159
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
index 2aef83d..b9730f3 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -490,7 +490,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 179
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
index 8b9a04f..c387d5f 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -452,7 +452,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 171
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index 299bde1..b37e3c9 100644
--- a/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -166,7 +166,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index f7a530c..b248ed6 100644
--- a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 75
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
index 106af53..f8d4383 100644
--- a/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -550,7 +550,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 205
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index 04ea482..bc5f632 100644
--- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -426,7 +426,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 176
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index 73a854b..ed6f528 100644
--- a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
@@ -110,7 +110,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
index db105d7..a94da2f 100644
--- a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -208,7 +208,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 119
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index c063e0c..b00da80 100644
--- a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -244,7 +244,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 132
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out
index d66eb7c..e6f484e 100644
--- a/Test/baseResults/hlsl.logical.binary.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.frag.out
@@ -124,7 +124,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out
index 20f87b8..986d83f 100644
--- a/Test/baseResults/hlsl.logical.binary.vec.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.vec.frag.out
@@ -254,7 +254,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.unary.frag.out b/Test/baseResults/hlsl.logical.unary.frag.out
index 711625d..cc933bb 100644
--- a/Test/baseResults/hlsl.logical.unary.frag.out
+++ b/Test/baseResults/hlsl.logical.unary.frag.out
@@ -184,7 +184,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logicalConvert.frag.out b/Test/baseResults/hlsl.logicalConvert.frag.out
index 44e1961..0e7bad1 100644
--- a/Test/baseResults/hlsl.logicalConvert.frag.out
+++ b/Test/baseResults/hlsl.logicalConvert.frag.out
@@ -254,7 +254,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.loopattr.frag.out b/Test/baseResults/hlsl.loopattr.frag.out
index ea37109..2784dda 100644
--- a/Test/baseResults/hlsl.loopattr.frag.out
+++ b/Test/baseResults/hlsl.loopattr.frag.out
@@ -136,7 +136,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matNx1.frag.out b/Test/baseResults/hlsl.matNx1.frag.out
index 48a7180..91b2ec3 100644
--- a/Test/baseResults/hlsl.matNx1.frag.out
+++ b/Test/baseResults/hlsl.matNx1.frag.out
@@ -153,7 +153,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 77
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.bool.frag.out b/Test/baseResults/hlsl.matType.bool.frag.out
index 500b311..d7d4b7d 100644
--- a/Test/baseResults/hlsl.matType.bool.frag.out
+++ b/Test/baseResults/hlsl.matType.bool.frag.out
@@ -233,7 +233,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out
index 1117df1..92d44a4 100644
--- a/Test/baseResults/hlsl.matType.frag.out
+++ b/Test/baseResults/hlsl.matType.frag.out
@@ -32,7 +32,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.int.frag.out b/Test/baseResults/hlsl.matType.int.frag.out
index a99bd15..551d41e 100644
--- a/Test/baseResults/hlsl.matType.int.frag.out
+++ b/Test/baseResults/hlsl.matType.int.frag.out
@@ -399,7 +399,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 232
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-1.frag.out b/Test/baseResults/hlsl.matpack-1.frag.out
index c480f78..5af6c2b 100644
--- a/Test/baseResults/hlsl.matpack-1.frag.out
+++ b/Test/baseResults/hlsl.matpack-1.frag.out
@@ -100,7 +100,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-pragma-global.frag.out b/Test/baseResults/hlsl.matpack-pragma-global.frag.out
index 2feef9e..d6afb4e 100644
--- a/Test/baseResults/hlsl.matpack-pragma-global.frag.out
+++ b/Test/baseResults/hlsl.matpack-pragma-global.frag.out
@@ -52,7 +52,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-pragma.frag.out b/Test/baseResults/hlsl.matpack-pragma.frag.out
index bd5ca50..aac5af5 100644
--- a/Test/baseResults/hlsl.matpack-pragma.frag.out
+++ b/Test/baseResults/hlsl.matpack-pragma.frag.out
@@ -170,7 +170,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matrixSwizzle.vert.out b/Test/baseResults/hlsl.matrixSwizzle.vert.out
index 4082cb2..4b103ac 100644
--- a/Test/baseResults/hlsl.matrixSwizzle.vert.out
+++ b/Test/baseResults/hlsl.matrixSwizzle.vert.out
@@ -677,7 +677,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matrixindex.frag.out b/Test/baseResults/hlsl.matrixindex.frag.out
index fa7a8c0..cf75c05 100644
--- a/Test/baseResults/hlsl.matrixindex.frag.out
+++ b/Test/baseResults/hlsl.matrixindex.frag.out
@@ -272,7 +272,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 83
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out
index 7a0c5d2..058786c 100644
--- a/Test/baseResults/hlsl.max.frag.out
+++ b/Test/baseResults/hlsl.max.frag.out
@@ -66,7 +66,7 @@
 0:?     'input2' (layout( location=1) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.memberFunCall.frag.out b/Test/baseResults/hlsl.memberFunCall.frag.out
index 2886f8f..7898376 100644
--- a/Test/baseResults/hlsl.memberFunCall.frag.out
+++ b/Test/baseResults/hlsl.memberFunCall.frag.out
@@ -152,7 +152,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mintypes.frag.out b/Test/baseResults/hlsl.mintypes.frag.out
index 013f8d4..07f28c3 100644
--- a/Test/baseResults/hlsl.mintypes.frag.out
+++ b/Test/baseResults/hlsl.mintypes.frag.out
@@ -98,7 +98,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mip.operator.frag.out b/Test/baseResults/hlsl.mip.operator.frag.out
index 48e563c..2c03a26 100644
--- a/Test/baseResults/hlsl.mip.operator.frag.out
+++ b/Test/baseResults/hlsl.mip.operator.frag.out
@@ -128,7 +128,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mul-truncate.frag.out b/Test/baseResults/hlsl.mul-truncate.frag.out
index 25e7b2e..806d241 100644
--- a/Test/baseResults/hlsl.mul-truncate.frag.out
+++ b/Test/baseResults/hlsl.mul-truncate.frag.out
@@ -383,7 +383,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 190
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiDescriptorSet.frag.out b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
index cfe3ea8..d79b121 100644
--- a/Test/baseResults/hlsl.multiDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
@@ -1,6 +1,6 @@
 hlsl.multiDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 92
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiEntry.vert.out b/Test/baseResults/hlsl.multiEntry.vert.out
index fcb9f18..0e31ed6 100644
--- a/Test/baseResults/hlsl.multiEntry.vert.out
+++ b/Test/baseResults/hlsl.multiEntry.vert.out
@@ -70,7 +70,7 @@
 0:?     'Index' ( in uint VertexIndex)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 41
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiReturn.frag.out b/Test/baseResults/hlsl.multiReturn.frag.out
index 9379863..fbe7fbf 100644
--- a/Test/baseResults/hlsl.multiReturn.frag.out
+++ b/Test/baseResults/hlsl.multiReturn.frag.out
@@ -48,7 +48,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{ temp float f,  temp 3-component vector of float v,  temp 3X3 matrix of float m} s})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.namespace.frag.out b/Test/baseResults/hlsl.namespace.frag.out
index 5346c44..c01089a 100644
--- a/Test/baseResults/hlsl.namespace.frag.out
+++ b/Test/baseResults/hlsl.namespace.frag.out
@@ -17,9 +17,8 @@
 0:?     Sequence
 0:12      Branch: Return with expression
 0:12        'v2' ( global 4-component vector of float)
-0:15  Function Definition: N2::N3::C1::getVec( ( temp 4-component vector of float)
+0:15  Function Definition: N2::N3::C1::getVec( ( global 4-component vector of float)
 0:15    Function Parameters: 
-0:15      '@this' ( temp structure{})
 0:?     Sequence
 0:15      Branch: Return with expression
 0:15        'v2' ( global 4-component vector of float)
@@ -34,7 +33,7 @@
 0:22              Function Call: N2::getVec( ( temp 4-component vector of float)
 0:22            Function Call: N2::N3::getVec( ( temp 4-component vector of float)
 0:22          vector-scale ( temp 4-component vector of float)
-0:22            Function Call: N2::N3::C1::getVec( ( temp 4-component vector of float)
+0:22            Function Call: N2::N3::C1::getVec( ( global 4-component vector of float)
 0:22            'N2::gf' ( global float)
 0:21  Function Definition: main( ( temp void)
 0:21    Function Parameters: 
@@ -70,9 +69,8 @@
 0:?     Sequence
 0:12      Branch: Return with expression
 0:12        'v2' ( global 4-component vector of float)
-0:15  Function Definition: N2::N3::C1::getVec( ( temp 4-component vector of float)
+0:15  Function Definition: N2::N3::C1::getVec( ( global 4-component vector of float)
 0:15    Function Parameters: 
-0:15      '@this' ( temp structure{})
 0:?     Sequence
 0:15      Branch: Return with expression
 0:15        'v2' ( global 4-component vector of float)
@@ -87,7 +85,7 @@
 0:22              Function Call: N2::getVec( ( temp 4-component vector of float)
 0:22            Function Call: N2::N3::getVec( ( temp 4-component vector of float)
 0:22          vector-scale ( temp 4-component vector of float)
-0:22            Function Call: N2::N3::C1::getVec( ( temp 4-component vector of float)
+0:22            Function Call: N2::N3::C1::getVec( ( global 4-component vector of float)
 0:22            'N2::gf' ( global float)
 0:21  Function Definition: main( ( temp void)
 0:21    Function Parameters: 
@@ -101,82 +99,75 @@
 0:?     'N2::gf' ( global float)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
-// Id's are bound by 54
+// Generated by (magic number): 8000b
+// Id's are bound by 50
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 52
+                              EntryPoint Fragment 4  "main" 48
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
                               Name 9  "N1::getVec("
                               Name 11  "N2::getVec("
                               Name 13  "N2::N3::getVec("
-                              Name 15  "C1"
-                              Name 19  "N2::N3::C1::getVec("
-                              Name 18  "@this"
-                              Name 21  "@main("
-                              Name 24  "v1"
-                              Name 28  "v2"
-                              Name 45  "N2::gf"
-                              Name 52  "@entryPointOutput"
-                              Decorate 52(@entryPointOutput) Location 0
+                              Name 15  "N2::N3::C1::getVec("
+                              Name 17  "@main("
+                              Name 20  "v1"
+                              Name 24  "v2"
+                              Name 41  "N2::gf"
+                              Name 48  "@entryPointOutput"
+                              Decorate 48(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
                8:             TypeFunction 7(fvec4)
-          15(C1):             TypeStruct
-              16:             TypePointer Function 15(C1)
-              17:             TypeFunction 7(fvec4) 16(ptr)
-              23:             TypePointer Private 7(fvec4)
-          24(v1):     23(ptr) Variable Private
-          28(v2):     23(ptr) Variable Private
-              44:             TypePointer Private 6(float)
-      45(N2::gf):     44(ptr) Variable Private
-              51:             TypePointer Output 7(fvec4)
-52(@entryPointOutput):     51(ptr) Variable Output
+              19:             TypePointer Private 7(fvec4)
+          20(v1):     19(ptr) Variable Private
+          24(v2):     19(ptr) Variable Private
+              40:             TypePointer Private 6(float)
+      41(N2::gf):     40(ptr) Variable Private
+              47:             TypePointer Output 7(fvec4)
+48(@entryPointOutput):     47(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              53:    7(fvec4) FunctionCall 21(@main()
-                              Store 52(@entryPointOutput) 53
+              49:    7(fvec4) FunctionCall 17(@main()
+                              Store 48(@entryPointOutput) 49
                               Return
                               FunctionEnd
   9(N1::getVec():    7(fvec4) Function None 8
               10:             Label
-              25:    7(fvec4) Load 24(v1)
-                              ReturnValue 25
+              21:    7(fvec4) Load 20(v1)
+                              ReturnValue 21
                               FunctionEnd
  11(N2::getVec():    7(fvec4) Function None 8
               12:             Label
-              29:    7(fvec4) Load 28(v2)
-                              ReturnValue 29
+              25:    7(fvec4) Load 24(v2)
+                              ReturnValue 25
                               FunctionEnd
 13(N2::N3::getVec():    7(fvec4) Function None 8
               14:             Label
-              32:    7(fvec4) Load 28(v2)
-                              ReturnValue 32
+              28:    7(fvec4) Load 24(v2)
+                              ReturnValue 28
                               FunctionEnd
-19(N2::N3::C1::getVec():    7(fvec4) Function None 17
-       18(@this):     16(ptr) FunctionParameter
-              20:             Label
-              35:    7(fvec4) Load 28(v2)
-                              ReturnValue 35
+15(N2::N3::C1::getVec():    7(fvec4) Function None 8
+              16:             Label
+              31:    7(fvec4) Load 24(v2)
+                              ReturnValue 31
                               FunctionEnd
-      21(@main():    7(fvec4) Function None 8
-              22:             Label
-              38:    7(fvec4) FunctionCall 9(N1::getVec()
-              39:    7(fvec4) FunctionCall 11(N2::getVec()
-              40:    7(fvec4) FAdd 38 39
-              41:    7(fvec4) FunctionCall 13(N2::N3::getVec()
-              42:    7(fvec4) FAdd 40 41
-              43:    7(fvec4) FunctionCall 19(N2::N3::C1::getVec()
-              46:    6(float) Load 45(N2::gf)
-              47:    7(fvec4) VectorTimesScalar 43 46
-              48:    7(fvec4) FAdd 42 47
-                              ReturnValue 48
+      17(@main():    7(fvec4) Function None 8
+              18:             Label
+              34:    7(fvec4) FunctionCall 9(N1::getVec()
+              35:    7(fvec4) FunctionCall 11(N2::getVec()
+              36:    7(fvec4) FAdd 34 35
+              37:    7(fvec4) FunctionCall 13(N2::N3::getVec()
+              38:    7(fvec4) FAdd 36 37
+              39:    7(fvec4) FunctionCall 15(N2::N3::C1::getVec()
+              42:    6(float) Load 41(N2::gf)
+              43:    7(fvec4) VectorTimesScalar 39 42
+              44:    7(fvec4) FAdd 38 43
+                              ReturnValue 44
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
index 3531a34..1121e0b 100644
--- a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
+++ b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
@@ -1,6 +1,6 @@
 hlsl.noSemantic.functionality1.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.nonint-index.frag.out b/Test/baseResults/hlsl.nonint-index.frag.out
index 897f8bc..71502ee 100644
--- a/Test/baseResults/hlsl.nonint-index.frag.out
+++ b/Test/baseResults/hlsl.nonint-index.frag.out
@@ -88,7 +88,7 @@
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
index 5a485c6..3cbae1e 100644
--- a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
+++ b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
@@ -268,7 +268,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 111
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.numericsuffixes.frag.out b/Test/baseResults/hlsl.numericsuffixes.frag.out
index 1725d3f..02f7d2a 100644
--- a/Test/baseResults/hlsl.numericsuffixes.frag.out
+++ b/Test/baseResults/hlsl.numericsuffixes.frag.out
@@ -192,7 +192,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.numthreads.comp.out b/Test/baseResults/hlsl.numthreads.comp.out
index c8676e3..49fa4f3 100644
--- a/Test/baseResults/hlsl.numthreads.comp.out
+++ b/Test/baseResults/hlsl.numthreads.comp.out
@@ -44,7 +44,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.opaque-type-bug.frag.out b/Test/baseResults/hlsl.opaque-type-bug.frag.out
index 738fa4f..d82509d 100644
--- a/Test/baseResults/hlsl.opaque-type-bug.frag.out
+++ b/Test/baseResults/hlsl.opaque-type-bug.frag.out
@@ -58,7 +58,7 @@
 0:?     'MyTexture' (layout( binding=0) uniform texture2D)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out
index 4cfc391..460262e 100644
--- a/Test/baseResults/hlsl.overload.frag.out
+++ b/Test/baseResults/hlsl.overload.frag.out
@@ -734,7 +734,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 520
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.params.default.frag.out b/Test/baseResults/hlsl.params.default.frag.out
index 6898240..be1f641 100644
--- a/Test/baseResults/hlsl.params.default.frag.out
+++ b/Test/baseResults/hlsl.params.default.frag.out
@@ -376,7 +376,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 178
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
index 7bcc879..6a1b1de 100644
--- a/Test/baseResults/hlsl.partialFlattenLocal.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
@@ -237,7 +237,7 @@
 0:?     'pos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 93
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
index c9fcc6f..eae3c98 100644
--- a/Test/baseResults/hlsl.partialFlattenMixed.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
@@ -91,7 +91,7 @@
 0:?     'pos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out
index 4686566..d3ce42e 100644
--- a/Test/baseResults/hlsl.partialInit.frag.out
+++ b/Test/baseResults/hlsl.partialInit.frag.out
@@ -400,7 +400,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 104
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line.frag.out b/Test/baseResults/hlsl.pp.line.frag.out
index 68476d2..3478c66 100644
--- a/Test/baseResults/hlsl.pp.line.frag.out
+++ b/Test/baseResults/hlsl.pp.line.frag.out
@@ -120,7 +120,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line2.frag.out b/Test/baseResults/hlsl.pp.line2.frag.out
index 9ccf05c..1c73bce 100644
--- a/Test/baseResults/hlsl.pp.line2.frag.out
+++ b/Test/baseResults/hlsl.pp.line2.frag.out
@@ -1,6 +1,6 @@
 hlsl.pp.line2.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 80
 
                               Capability Shader
@@ -129,6 +129,7 @@
 71(i.vTextureCoords):     70(ptr) Variable Input
               74:             TypePointer Output 11(fvec4)
 75(@entryPointOutput.vColor):     74(ptr) Variable Output
+                              Line 17 23 1
        5(MainPs):           3 Function None 4
                6:             Label
            69(i):     10(ptr) Variable Function
@@ -144,6 +145,7 @@
                               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
diff --git a/Test/baseResults/hlsl.pp.line3.frag.out b/Test/baseResults/hlsl.pp.line3.frag.out
index d19c516..717a21b 100644
--- a/Test/baseResults/hlsl.pp.line3.frag.out
+++ b/Test/baseResults/hlsl.pp.line3.frag.out
@@ -1,6 +1,6 @@
 hlsl.pp.line3.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 78
 
                               Capability Shader
@@ -120,6 +120,7 @@
 69(i.vTextureCoords):     68(ptr) Variable Input
               72:             TypePointer Output 12(fvec4)
 73(@entryPointOutput.vColor):     72(ptr) Variable Output
+                              Line 1 23 1
        6(MainPs):           4 Function None 5
                7:             Label
            67(i):     11(ptr) Variable Function
@@ -135,6 +136,7 @@
                               Store 73(@entryPointOutput.vColor) 77
                               Return
                               FunctionEnd
+                              Line 1 23 1
 16(@MainPs(struct-PS_INPUT-vf21;):13(PS_OUTPUT) Function None 14
            15(i):     11(ptr) FunctionParameter
               17:             Label
diff --git a/Test/baseResults/hlsl.pp.line4.frag.out b/Test/baseResults/hlsl.pp.line4.frag.out
index 2244588..da968b2 100644
--- a/Test/baseResults/hlsl.pp.line4.frag.out
+++ b/Test/baseResults/hlsl.pp.line4.frag.out
@@ -1,6 +1,6 @@
 hlsl.pp.line4.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 116
 
                               Capability Shader
@@ -112,7 +112,9 @@
 70(i.vTextureCoords):     69(ptr) Variable Input
               73:             TypePointer Output 11(fvec4)
 74(@entryPointOutput.vColor):     73(ptr) Variable Output
+                              Line 17 25 1
        5(MainPs):           3 Function None 4
+                              NoLine
                6:             Label
                               Line 17 25 0
               71:    8(fvec2) Load 70(i.vTextureCoords)
diff --git a/Test/baseResults/hlsl.pp.vert.out b/Test/baseResults/hlsl.pp.vert.out
index 5478101..652cf17 100644
--- a/Test/baseResults/hlsl.pp.vert.out
+++ b/Test/baseResults/hlsl.pp.vert.out
@@ -26,7 +26,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int goodGlobal1,  uniform int goodGlobal2})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 13
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out
index 3992618..4dd025a 100644
--- a/Test/baseResults/hlsl.precedence.frag.out
+++ b/Test/baseResults/hlsl.precedence.frag.out
@@ -148,7 +148,7 @@
 0:?     'a4' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precedence2.frag.out b/Test/baseResults/hlsl.precedence2.frag.out
index f231b35..1611d5a 100644
--- a/Test/baseResults/hlsl.precedence2.frag.out
+++ b/Test/baseResults/hlsl.precedence2.frag.out
@@ -114,7 +114,7 @@
 0:?     'a4' (layout( location=3) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precise.frag.out b/Test/baseResults/hlsl.precise.frag.out
index 39e3578..2d134b8 100644
--- a/Test/baseResults/hlsl.precise.frag.out
+++ b/Test/baseResults/hlsl.precise.frag.out
@@ -76,7 +76,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.preprocessor.frag.out b/Test/baseResults/hlsl.preprocessor.frag.out
index 754d0d8..106762b 100644
--- a/Test/baseResults/hlsl.preprocessor.frag.out
+++ b/Test/baseResults/hlsl.preprocessor.frag.out
@@ -94,7 +94,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.printf.comp.out b/Test/baseResults/hlsl.printf.comp.out
index ea31c35..c4768a2 100644
--- a/Test/baseResults/hlsl.printf.comp.out
+++ b/Test/baseResults/hlsl.printf.comp.out
@@ -126,7 +126,7 @@
 0:?       "first string"
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out
index a34b7dd..91b1d58 100644
--- a/Test/baseResults/hlsl.promote.atomic.frag.out
+++ b/Test/baseResults/hlsl.promote.atomic.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.binary.frag.out b/Test/baseResults/hlsl.promote.binary.frag.out
index a0007c3..f9f57a4 100644
--- a/Test/baseResults/hlsl.promote.binary.frag.out
+++ b/Test/baseResults/hlsl.promote.binary.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 83
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.vec1.frag.out b/Test/baseResults/hlsl.promote.vec1.frag.out
index 11e324f..7bdaf45 100644
--- a/Test/baseResults/hlsl.promote.vec1.frag.out
+++ b/Test/baseResults/hlsl.promote.vec1.frag.out
@@ -80,7 +80,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promotions.frag.out b/Test/baseResults/hlsl.promotions.frag.out
index f135406..6d73cc7 100644
--- a/Test/baseResults/hlsl.promotions.frag.out
+++ b/Test/baseResults/hlsl.promotions.frag.out
@@ -1582,7 +1582,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 596
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.round.dx10.frag.out b/Test/baseResults/hlsl.round.dx10.frag.out
index be72dc5..f8597d4 100644
--- a/Test/baseResults/hlsl.round.dx10.frag.out
+++ b/Test/baseResults/hlsl.round.dx10.frag.out
@@ -29,7 +29,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.round.dx9.frag.out b/Test/baseResults/hlsl.round.dx9.frag.out
index 9333c7d..d4ff02a 100644
--- a/Test/baseResults/hlsl.round.dx9.frag.out
+++ b/Test/baseResults/hlsl.round.dx9.frag.out
@@ -29,7 +29,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
@@ -60,6 +60,7 @@
                6:             Label
                               Return
                               FunctionEnd
+                              Line 1 2 1
 12(PixelShaderFunction(vf4;):    8(fvec4) Function None 10
        11(input):      9(ptr) FunctionParameter
               13:             Label
diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out
index 06bc317..83169f1 100644
--- a/Test/baseResults/hlsl.rw.atomics.frag.out
+++ b/Test/baseResults/hlsl.rw.atomics.frag.out
@@ -3946,7 +3946,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 1147
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out
index c79877c..02ed379 100644
--- a/Test/baseResults/hlsl.rw.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -1744,7 +1744,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 607
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out
index 265eaf9..558bf42 100644
--- a/Test/baseResults/hlsl.rw.register.frag.out
+++ b/Test/baseResults/hlsl.rw.register.frag.out
@@ -98,7 +98,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
index 8e4716b..f2bef19 100644
--- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
@@ -1690,7 +1690,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 607
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.swizzle.frag.out b/Test/baseResults/hlsl.rw.swizzle.frag.out
index 97dd0dc..5121ceb 100644
--- a/Test/baseResults/hlsl.rw.swizzle.frag.out
+++ b/Test/baseResults/hlsl.rw.swizzle.frag.out
@@ -202,7 +202,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
index 1f77a77..a0c639b 100644
--- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
@@ -1708,7 +1708,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 711
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 28d96f0..1acca18 100644
--- a/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -322,7 +322,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 146
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index 12c6711..e306317 100644
--- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -550,7 +550,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.dx9.frag.out b/Test/baseResults/hlsl.sample.dx9.frag.out
index 282455c..04eb9d3 100644
--- a/Test/baseResults/hlsl.sample.dx9.frag.out
+++ b/Test/baseResults/hlsl.sample.dx9.frag.out
@@ -378,7 +378,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 135
 
                               Capability Shader
@@ -477,6 +477,7 @@
 128(@entryPointOutput.Color):    127(ptr) Variable Output
              131:             TypePointer Output 7(float)
 132(@entryPointOutput.Depth):    131(ptr) Variable Output
+                              Line 1 15 1
          5(main):           3 Function None 4
                6:             Label
 125(flattenTemp):    109(ptr) Variable Function
@@ -491,6 +492,7 @@
                               Store 132(@entryPointOutput.Depth) 134
                               Return
                               FunctionEnd
+                              Line 1 15 1
       11(@main():9(PS_OUTPUT) Function None 10
               12:             Label
     14(ColorOut):     13(ptr) Variable Function
diff --git a/Test/baseResults/hlsl.sample.dx9.vert.out b/Test/baseResults/hlsl.sample.dx9.vert.out
index 4b718cf..59878a9 100644
--- a/Test/baseResults/hlsl.sample.dx9.vert.out
+++ b/Test/baseResults/hlsl.sample.dx9.vert.out
@@ -154,7 +154,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 64
 
                               Capability Shader
@@ -215,6 +215,7 @@
               53:    7(float) Constant 1073741824
               60:             TypePointer Output 8(fvec4)
 61(@entryPointOutput.Pos):     60(ptr) Variable Output
+                              Line 1 11 1
          5(main):           3 Function None 4
                6:             Label
                               Line 1 11 0
@@ -223,6 +224,7 @@
                               Store 61(@entryPointOutput.Pos) 63
                               Return
                               FunctionEnd
+                              Line 1 11 1
       11(@main():9(VS_OUTPUT) Function None 10
               12:             Label
       14(PosOut):     13(ptr) Variable Function
diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index e5d204f..0a351b4 100644
--- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -364,7 +364,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index 5b14c65..0770e0b 100644
--- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -274,7 +274,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index 8754a03..ea0e4e2 100644
--- a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
@@ -154,7 +154,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index e177d77..f59fc81 100644
--- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 146
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index 2f15b42..919be71 100644
--- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -424,7 +424,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 170
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index 291f624..5b29757 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -400,7 +400,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index a5bb613..c3114a1 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -298,7 +298,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index 0ab61eb..caddcee 100644
--- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -399,7 +399,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 209
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index c178c57..fde1b58 100644
--- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -381,7 +381,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
index 6859f6d..7f17e90 100644
--- a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
@@ -85,7 +85,7 @@
 0:?     'g_tTex' (layout( binding=3) uniform texture1D)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index 1e50d7b..cc1b858 100644
--- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -327,7 +327,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 167
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index 3b1eb6f..9d8413c 100644
--- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -339,7 +339,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 178
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index a734e54..45e33ff 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -435,7 +435,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 210
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index 54135cd..6807d99 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -417,7 +417,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 199
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index 4922cde..338a5e7 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -351,7 +351,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 168
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index 22bd257..4b68c90 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -363,7 +363,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 179
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index 67e1d15..a2e58bd 100644
--- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -430,7 +430,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 140
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index 8f2fabc..09bfbdf 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -532,7 +532,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 175
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index 6982090..f63d9e8 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -494,7 +494,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 166
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index 5694f89..3180e7a 100644
--- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -472,7 +472,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 166
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index a3bc4c1..ce79969 100644
--- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -340,7 +340,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index 68e0e87..7f3af78 100644
--- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 147
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index ee3588d..e1d449f 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -426,7 +426,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 172
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index a3ff9e6..bbb51f3 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -386,7 +386,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index c9d431b..1b06c57 100644
--- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -400,7 +400,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index 3f6ae55..e256054 100644
--- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -298,7 +298,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 119
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalar-length.frag.out b/Test/baseResults/hlsl.scalar-length.frag.out
index c09216a..fd5f0b8 100644
--- a/Test/baseResults/hlsl.scalar-length.frag.out
+++ b/Test/baseResults/hlsl.scalar-length.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalar2matrix.frag.out b/Test/baseResults/hlsl.scalar2matrix.frag.out
index 62980dd..ee0c3db 100644
--- a/Test/baseResults/hlsl.scalar2matrix.frag.out
+++ b/Test/baseResults/hlsl.scalar2matrix.frag.out
@@ -374,7 +374,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalarCast.vert.out b/Test/baseResults/hlsl.scalarCast.vert.out
index 17356f9..f10f86c 100644
--- a/Test/baseResults/hlsl.scalarCast.vert.out
+++ b/Test/baseResults/hlsl.scalarCast.vert.out
@@ -322,7 +322,7 @@
 0:?     '@entryPointOutput.texCoord' (layout( location=0) out 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scope.frag.out b/Test/baseResults/hlsl.scope.frag.out
index 5d73bba..24f452c 100644
--- a/Test/baseResults/hlsl.scope.frag.out
+++ b/Test/baseResults/hlsl.scope.frag.out
@@ -102,7 +102,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.self_cast.frag.out b/Test/baseResults/hlsl.self_cast.frag.out
index ad4252b..1328833 100644
--- a/Test/baseResults/hlsl.self_cast.frag.out
+++ b/Test/baseResults/hlsl.self_cast.frag.out
@@ -68,7 +68,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semantic-1.vert.out b/Test/baseResults/hlsl.semantic-1.vert.out
index 25fb582..191afbc 100644
--- a/Test/baseResults/hlsl.semantic-1.vert.out
+++ b/Test/baseResults/hlsl.semantic-1.vert.out
@@ -242,7 +242,7 @@
 0:?     'v' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semantic.geom.out b/Test/baseResults/hlsl.semantic.geom.out
index 0aba000..740f4a2 100644
--- a/Test/baseResults/hlsl.semantic.geom.out
+++ b/Test/baseResults/hlsl.semantic.geom.out
@@ -261,7 +261,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 88
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.semantic.vert.out b/Test/baseResults/hlsl.semantic.vert.out
index c17969a..41edff2 100644
--- a/Test/baseResults/hlsl.semantic.vert.out
+++ b/Test/baseResults/hlsl.semantic.vert.out
@@ -211,7 +211,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semicolons.frag.out b/Test/baseResults/hlsl.semicolons.frag.out
index 1afcd5b..347190e 100644
--- a/Test/baseResults/hlsl.semicolons.frag.out
+++ b/Test/baseResults/hlsl.semicolons.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
index d3b17f0..05bfa6a 100644
--- a/Test/baseResults/hlsl.shapeConv.frag.out
+++ b/Test/baseResults/hlsl.shapeConv.frag.out
@@ -319,7 +319,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 127
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shapeConvRet.frag.out b/Test/baseResults/hlsl.shapeConvRet.frag.out
index e3e27a2..a23478c 100644
--- a/Test/baseResults/hlsl.shapeConvRet.frag.out
+++ b/Test/baseResults/hlsl.shapeConvRet.frag.out
@@ -68,7 +68,7 @@
 0:?     'f' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
index bf88ce8..1f44be5 100644
--- a/Test/baseResults/hlsl.sin.frag.out
+++ b/Test/baseResults/hlsl.sin.frag.out
@@ -52,7 +52,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.singleArgIntPromo.vert.out b/Test/baseResults/hlsl.singleArgIntPromo.vert.out
index a610594..a5bf362 100644
--- a/Test/baseResults/hlsl.singleArgIntPromo.vert.out
+++ b/Test/baseResults/hlsl.singleArgIntPromo.vert.out
@@ -194,7 +194,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 75
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.snorm.uav.comp.out b/Test/baseResults/hlsl.snorm.uav.comp.out
index 7b8cd41..40ab6cf 100644
--- a/Test/baseResults/hlsl.snorm.uav.comp.out
+++ b/Test/baseResults/hlsl.snorm.uav.comp.out
@@ -112,7 +112,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.specConstant.frag.out b/Test/baseResults/hlsl.specConstant.frag.out
index eb62242..3d81789 100644
--- a/Test/baseResults/hlsl.specConstant.frag.out
+++ b/Test/baseResults/hlsl.specConstant.frag.out
@@ -136,7 +136,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.spv.1.6.discard.frag.out b/Test/baseResults/hlsl.spv.1.6.discard.frag.out
new file mode 100644
index 0000000..0d09d25
--- /dev/null
+++ b/Test/baseResults/hlsl.spv.1.6.discard.frag.out
@@ -0,0 +1,195 @@
+hlsl.spv.1.6.discard.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2  Function Definition: foo(f1; ( temp void)
+0:2    Function Parameters: 
+0:2      'f' ( in float)
+0:?     Sequence
+0:3      Test condition and select ( temp void)
+0:3        Condition
+0:3        Compare Less Than ( temp bool)
+0:3          'f' ( in float)
+0:3          Constant:
+0:3            1.000000
+0:3        true case
+0:4        Branch: Kill
+0:8  Function Definition: @PixelShaderFunction(vf4; ( temp void)
+0:8    Function Parameters: 
+0:8      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:9      Function Call: foo(f1; ( temp void)
+0:9        direct index ( temp float)
+0:9          'input' ( in 4-component vector of float)
+0:9          Constant:
+0:9            2 (const int)
+0:10      Test condition and select ( temp void)
+0:10        Condition
+0:10        Convert float to bool ( temp bool)
+0:10          direct index ( temp float)
+0:10            'input' ( in 4-component vector of float)
+0:10            Constant:
+0:10              0 (const int)
+0:10        true case
+0:11        Branch: Kill
+0:12      Sequence
+0:12        move second child to first child ( temp float)
+0:12          'f' ( temp float)
+0:12          direct index ( temp float)
+0:12            'input' ( in 4-component vector of float)
+0:12            Constant:
+0:12              0 (const int)
+0:13      Branch: Kill
+0:8  Function Definition: PixelShaderFunction( ( temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:?         'input' ( temp 4-component vector of float)
+0:?         'input' (layout( location=0) in 4-component vector of float)
+0:8      Function Call: @PixelShaderFunction(vf4; ( temp void)
+0:?         'input' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'input' (layout( location=0) in 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2  Function Definition: foo(f1; ( temp void)
+0:2    Function Parameters: 
+0:2      'f' ( in float)
+0:?     Sequence
+0:3      Test condition and select ( temp void)
+0:3        Condition
+0:3        Compare Less Than ( temp bool)
+0:3          'f' ( in float)
+0:3          Constant:
+0:3            1.000000
+0:3        true case
+0:4        Branch: Kill
+0:8  Function Definition: @PixelShaderFunction(vf4; ( temp void)
+0:8    Function Parameters: 
+0:8      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:9      Function Call: foo(f1; ( temp void)
+0:9        direct index ( temp float)
+0:9          'input' ( in 4-component vector of float)
+0:9          Constant:
+0:9            2 (const int)
+0:10      Test condition and select ( temp void)
+0:10        Condition
+0:10        Convert float to bool ( temp bool)
+0:10          direct index ( temp float)
+0:10            'input' ( in 4-component vector of float)
+0:10            Constant:
+0:10              0 (const int)
+0:10        true case
+0:11        Branch: Kill
+0:12      Sequence
+0:12        move second child to first child ( temp float)
+0:12          'f' ( temp float)
+0:12          direct index ( temp float)
+0:12            'input' ( in 4-component vector of float)
+0:12            Constant:
+0:12              0 (const int)
+0:13      Branch: Kill
+0:8  Function Definition: PixelShaderFunction( ( temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:?         'input' ( temp 4-component vector of float)
+0:?         'input' (layout( location=0) in 4-component vector of float)
+0:8      Function Call: @PixelShaderFunction(vf4; ( temp void)
+0:?         'input' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'input' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 47
+
+                              Capability Shader
+                              Capability DemoteToHelperInvocationEXT
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 42
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "PixelShaderFunction"
+                              Name 10  "foo(f1;"
+                              Name 9  "f"
+                              Name 16  "@PixelShaderFunction(vf4;"
+                              Name 15  "input"
+                              Name 24  "param"
+                              Name 37  "f"
+                              Name 40  "input"
+                              Name 42  "input"
+                              Name 44  "param"
+                              Decorate 42(input) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               8:             TypeFunction 2 7(ptr)
+              12:             TypeVector 6(float) 4
+              13:             TypePointer Function 12(fvec4)
+              14:             TypeFunction 2 13(ptr)
+              19:    6(float) Constant 1065353216
+              20:             TypeBool
+              25:             TypeInt 32 0
+              26:     25(int) Constant 2
+              30:     25(int) Constant 0
+              33:    6(float) Constant 0
+              41:             TypePointer Input 12(fvec4)
+       42(input):     41(ptr) Variable Input
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+       40(input):     13(ptr) Variable Function
+       44(param):     13(ptr) Variable Function
+              43:   12(fvec4) Load 42(input)
+                              Store 40(input) 43
+              45:   12(fvec4) Load 40(input)
+                              Store 44(param) 45
+              46:           2 FunctionCall 16(@PixelShaderFunction(vf4;) 44(param)
+                              Return
+                              FunctionEnd
+     10(foo(f1;):           2 Function None 8
+            9(f):      7(ptr) FunctionParameter
+              11:             Label
+              18:    6(float) Load 9(f)
+              21:    20(bool) FOrdLessThan 18 19
+                              SelectionMerge 23 None
+                              BranchConditional 21 22 23
+              22:               Label
+                                DemoteToHelperInvocationEXT
+                                Branch 23
+              23:             Label
+                              Return
+                              FunctionEnd
+16(@PixelShaderFunction(vf4;):           2 Function None 14
+       15(input):     13(ptr) FunctionParameter
+              17:             Label
+       24(param):      7(ptr) Variable Function
+           37(f):      7(ptr) Variable Function
+              27:      7(ptr) AccessChain 15(input) 26
+              28:    6(float) Load 27
+                              Store 24(param) 28
+              29:           2 FunctionCall 10(foo(f1;) 24(param)
+              31:      7(ptr) AccessChain 15(input) 30
+              32:    6(float) Load 31
+              34:    20(bool) FUnordNotEqual 32 33
+                              SelectionMerge 36 None
+                              BranchConditional 34 35 36
+              35:               Label
+                                DemoteToHelperInvocationEXT
+                                Branch 36
+              36:             Label
+              38:      7(ptr) AccessChain 15(input) 30
+              39:    6(float) Load 38
+                              Store 37(f) 39
+                              DemoteToHelperInvocationEXT
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.staticFuncInit.frag.out b/Test/baseResults/hlsl.staticFuncInit.frag.out
index 586dace..9e1e4a8 100644
--- a/Test/baseResults/hlsl.staticFuncInit.frag.out
+++ b/Test/baseResults/hlsl.staticFuncInit.frag.out
@@ -130,7 +130,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.staticMemberFunction.frag.out b/Test/baseResults/hlsl.staticMemberFunction.frag.out
index f0e5f9f..9cd3d38 100644
--- a/Test/baseResults/hlsl.staticMemberFunction.frag.out
+++ b/Test/baseResults/hlsl.staticMemberFunction.frag.out
@@ -118,7 +118,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
index e518821..2198aff 100644
--- a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
+++ b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
@@ -96,7 +96,7 @@
 0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.string.frag.out b/Test/baseResults/hlsl.string.frag.out
index 047f413..2a5ce37 100644
--- a/Test/baseResults/hlsl.string.frag.out
+++ b/Test/baseResults/hlsl.string.frag.out
@@ -50,7 +50,7 @@
 0:?     'f' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.stringtoken.frag.out b/Test/baseResults/hlsl.stringtoken.frag.out
index f2ca742..144bebc 100644
--- a/Test/baseResults/hlsl.stringtoken.frag.out
+++ b/Test/baseResults/hlsl.stringtoken.frag.out
@@ -70,7 +70,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
index 7330f56..a36bba4 100644
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -213,7 +213,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 102
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split-1.vert.out b/Test/baseResults/hlsl.struct.split-1.vert.out
index f204bd5..89b4e4e 100644
--- a/Test/baseResults/hlsl.struct.split-1.vert.out
+++ b/Test/baseResults/hlsl.struct.split-1.vert.out
@@ -196,7 +196,7 @@
 0:?     'Pos_loose' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.array.geom.out b/Test/baseResults/hlsl.struct.split.array.geom.out
index 3d75fb8..0e3e852 100644
--- a/Test/baseResults/hlsl.struct.split.array.geom.out
+++ b/Test/baseResults/hlsl.struct.split.array.geom.out
@@ -160,7 +160,7 @@
 0:?     'OutputStream.VertexID' (layout( location=2) out uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 82
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.assign.frag.out b/Test/baseResults/hlsl.struct.split.assign.frag.out
index c40dbd6..16c897b 100644
--- a/Test/baseResults/hlsl.struct.split.assign.frag.out
+++ b/Test/baseResults/hlsl.struct.split.assign.frag.out
@@ -209,7 +209,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.call.vert.out b/Test/baseResults/hlsl.struct.split.call.vert.out
index 2570552..7451a34 100644
--- a/Test/baseResults/hlsl.struct.split.call.vert.out
+++ b/Test/baseResults/hlsl.struct.split.call.vert.out
@@ -214,7 +214,7 @@
 0:?     'vsin.x1_in' (layout( location=2) in int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 77
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.nested.geom.out b/Test/baseResults/hlsl.struct.split.nested.geom.out
index 1abe4c3..9bab38c 100644
--- a/Test/baseResults/hlsl.struct.split.nested.geom.out
+++ b/Test/baseResults/hlsl.struct.split.nested.geom.out
@@ -430,7 +430,7 @@
 0:?     'ts.contains_no_builtin_io.m1' (layout( location=3) out int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 99
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.trivial.geom.out b/Test/baseResults/hlsl.struct.split.trivial.geom.out
index 89c02bf..f46316f 100644
--- a/Test/baseResults/hlsl.struct.split.trivial.geom.out
+++ b/Test/baseResults/hlsl.struct.split.trivial.geom.out
@@ -192,7 +192,7 @@
 0:?     'ts.pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 67
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.trivial.vert.out b/Test/baseResults/hlsl.struct.split.trivial.vert.out
index f1470ab..065f422 100644
--- a/Test/baseResults/hlsl.struct.split.trivial.vert.out
+++ b/Test/baseResults/hlsl.struct.split.trivial.vert.out
@@ -98,7 +98,7 @@
 0:?     'Pos_loose' (layout( location=1) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structIoFourWay.frag.out b/Test/baseResults/hlsl.structIoFourWay.frag.out
index fd1a8bb..3faff5b 100644
--- a/Test/baseResults/hlsl.structIoFourWay.frag.out
+++ b/Test/baseResults/hlsl.structIoFourWay.frag.out
@@ -162,7 +162,7 @@
 0:?     't.normal' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structStructName.frag.out b/Test/baseResults/hlsl.structStructName.frag.out
index 3fdbca9..ce305b0 100644
--- a/Test/baseResults/hlsl.structStructName.frag.out
+++ b/Test/baseResults/hlsl.structStructName.frag.out
@@ -44,7 +44,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structarray.flatten.frag.out b/Test/baseResults/hlsl.structarray.flatten.frag.out
index 97e57b1..4896dca 100644
--- a/Test/baseResults/hlsl.structarray.flatten.frag.out
+++ b/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -157,7 +157,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structarray.flatten.geom.out b/Test/baseResults/hlsl.structarray.flatten.geom.out
index 619dccf..e36e5f0 100644
--- a/Test/baseResults/hlsl.structarray.flatten.geom.out
+++ b/Test/baseResults/hlsl.structarray.flatten.geom.out
@@ -314,7 +314,7 @@
 0:?     'outStream.uv' (layout( location=1) out 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 82
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
index a4e540f..acfbf5d 100644
--- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -151,7 +151,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.append.frag.out b/Test/baseResults/hlsl.structbuffer.append.frag.out
index 518b67f..4c57e0b 100644
--- a/Test/baseResults/hlsl.structbuffer.append.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.frag.out
@@ -124,7 +124,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index ba874ee..3f26652 100644
--- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -475,7 +475,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 87
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out
index b5252bc..f3e92ce 100644
--- a/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -324,7 +324,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 114
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index 3d97ee5..65e4a14 100644
--- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -176,7 +176,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
index a7668a7..6a86e48 100644
--- a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
@@ -180,7 +180,7 @@
 0:?     'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 85
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
index bd2a4e6..2086d59 100644
--- a/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -139,7 +139,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
index 3409a5f..1953d46 100644
--- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
@@ -136,7 +136,7 @@
 0:?     'dispatchId' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index 294a1c6..0e16ef1 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -188,7 +188,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
index 23b2125..95b13a8 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
@@ -1,6 +1,6 @@
 hlsl.structbuffer.incdec.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
index 2605777..72efcc0 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
@@ -204,7 +204,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index 1eb98aa..9dfdaf0 100644
--- a/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -176,7 +176,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index 337442d..5fdbd1d 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -1004,7 +1004,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 239
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out b/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out
new file mode 100644
index 0000000..b024bd4
--- /dev/null
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out
@@ -0,0 +1,140 @@
+hlsl.structbuffer.rwbyte2.comp
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:6  Function Definition: @main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp uint)
+0:7          'f' ( temp uint)
+0:7          indirect index (layout( row_major std430) buffer uint)
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'g_bbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:7              Constant:
+0:7                0 (const uint)
+0:7            right-shift ( temp int)
+0:7              Constant:
+0:7                16 (const int)
+0:7              Constant:
+0:7                2 (const int)
+0:8      move second child to first child ( temp uint)
+0:8        direct index (layout( row_major std430) buffer uint)
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:8            'g_sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:8            Constant:
+0:8              0 (const uint)
+0:8          Constant:
+0:8            0 (const int)
+0:8        'f' ( temp uint)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'g_sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:?     'g_bbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:6  Function Definition: @main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp uint)
+0:7          'f' ( temp uint)
+0:7          indirect index (layout( row_major std430) buffer uint)
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'g_bbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:7              Constant:
+0:7                0 (const uint)
+0:7            right-shift ( temp int)
+0:7              Constant:
+0:7                16 (const int)
+0:7              Constant:
+0:7                2 (const int)
+0:8      move second child to first child ( temp uint)
+0:8        direct index (layout( row_major std430) buffer uint)
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:8            'g_sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:8            Constant:
+0:8              0 (const uint)
+0:8          Constant:
+0:8            0 (const int)
+0:8        'f' ( temp uint)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'g_sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:?     'g_bbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 30
+
+                              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  "f"
+                              Name 12  "g_bbuf"
+                              MemberName 12(g_bbuf) 0  "@data"
+                              Name 14  "g_bbuf"
+                              Name 24  "g_sbuf"
+                              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
+                              Decorate 14(g_bbuf) Binding 1
+                              Decorate 23 ArrayStride 4
+                              MemberDecorate 24(g_sbuf) 0 Offset 0
+                              Decorate 24(g_sbuf) BufferBlock
+                              Decorate 26(g_sbuf) DescriptorSet 0
+                              Decorate 26(g_sbuf) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeInt 32 0
+               9:             TypePointer Function 8(int)
+              11:             TypeRuntimeArray 8(int)
+      12(g_bbuf):             TypeStruct 11
+              13:             TypePointer Uniform 12(g_bbuf)
+      14(g_bbuf):     13(ptr) Variable Uniform
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+              17:     15(int) Constant 16
+              18:     15(int) Constant 2
+              20:             TypePointer Uniform 8(int)
+              23:             TypeRuntimeArray 8(int)
+      24(g_sbuf):             TypeStruct 23
+              25:             TypePointer Uniform 24(g_sbuf)
+      26(g_sbuf):     25(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+              29:           2 FunctionCall 6(@main()
+                              Return
+                              FunctionEnd
+       6(@main():           2 Function None 3
+               7:             Label
+           10(f):      9(ptr) Variable Function
+              19:     15(int) ShiftRightArithmetic 17 18
+              21:     20(ptr) AccessChain 14(g_bbuf) 16 19
+              22:      8(int) Load 21
+                              Store 10(f) 22
+              27:      8(int) Load 10(f)
+              28:     20(ptr) AccessChain 26(g_sbuf) 16 16
+                              Store 28 27
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.structin.vert.out b/Test/baseResults/hlsl.structin.vert.out
index 85f6346..04a64e7 100644
--- a/Test/baseResults/hlsl.structin.vert.out
+++ b/Test/baseResults/hlsl.structin.vert.out
@@ -340,7 +340,7 @@
 0:?     'e' (layout( location=5) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 94
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.subpass.frag.out b/Test/baseResults/hlsl.subpass.frag.out
index 2aca628..942ef5e 100644
--- a/Test/baseResults/hlsl.subpass.frag.out
+++ b/Test/baseResults/hlsl.subpass.frag.out
@@ -430,7 +430,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 204
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out
index c239640..2ee9bd9 100644
--- a/Test/baseResults/hlsl.switch.frag.out
+++ b/Test/baseResults/hlsl.switch.frag.out
@@ -296,7 +296,7 @@
 0:?     'd' (layout( location=2) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out
index 88ea3cc..afb81de 100644
--- a/Test/baseResults/hlsl.swizzle.frag.out
+++ b/Test/baseResults/hlsl.swizzle.frag.out
@@ -77,7 +77,7 @@
 0:?     'AmbientColor' ( global 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.synthesizeInput.frag.out b/Test/baseResults/hlsl.synthesizeInput.frag.out
index 316a352..5462e64 100644
--- a/Test/baseResults/hlsl.synthesizeInput.frag.out
+++ b/Test/baseResults/hlsl.synthesizeInput.frag.out
@@ -98,7 +98,7 @@
 0:?     'input.no_interp' (layout( location=1) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.target.frag.out b/Test/baseResults/hlsl.target.frag.out
index 8bfaa2b..9e86746 100644
--- a/Test/baseResults/hlsl.target.frag.out
+++ b/Test/baseResults/hlsl.target.frag.out
@@ -114,7 +114,7 @@
 0:?     'out2' (layout( location=3) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.targetStruct1.frag.out b/Test/baseResults/hlsl.targetStruct1.frag.out
index 095d15d..0be96d1 100644
--- a/Test/baseResults/hlsl.targetStruct1.frag.out
+++ b/Test/baseResults/hlsl.targetStruct1.frag.out
@@ -184,7 +184,7 @@
 0:?     'po' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.targetStruct2.frag.out b/Test/baseResults/hlsl.targetStruct2.frag.out
index c57ae00..2fa4765 100644
--- a/Test/baseResults/hlsl.targetStruct2.frag.out
+++ b/Test/baseResults/hlsl.targetStruct2.frag.out
@@ -184,7 +184,7 @@
 0:?     'po' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.templatetypes.frag.out b/Test/baseResults/hlsl.templatetypes.frag.out
index 842ed0d..5624c28 100644
--- a/Test/baseResults/hlsl.templatetypes.frag.out
+++ b/Test/baseResults/hlsl.templatetypes.frag.out
@@ -508,7 +508,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 153
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texture.struct.frag.out b/Test/baseResults/hlsl.texture.struct.frag.out
index bf9ab68..ba632be 100644
--- a/Test/baseResults/hlsl.texture.struct.frag.out
+++ b/Test/baseResults/hlsl.texture.struct.frag.out
@@ -839,7 +839,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 240
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texture.subvec4.frag.out b/Test/baseResults/hlsl.texture.subvec4.frag.out
index 1a7816d..9c3b741 100644
--- a/Test/baseResults/hlsl.texture.subvec4.frag.out
+++ b/Test/baseResults/hlsl.texture.subvec4.frag.out
@@ -356,7 +356,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texturebuffer.frag.out b/Test/baseResults/hlsl.texturebuffer.frag.out
index 37e19c2..ae1d4f7 100644
--- a/Test/baseResults/hlsl.texturebuffer.frag.out
+++ b/Test/baseResults/hlsl.texturebuffer.frag.out
@@ -70,7 +70,7 @@
 0:?     'pos' ( in 4-component vector of float FragCoord)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.this.frag.out b/Test/baseResults/hlsl.this.frag.out
index e6b54cf..6e4a8a0 100644
--- a/Test/baseResults/hlsl.this.frag.out
+++ b/Test/baseResults/hlsl.this.frag.out
@@ -240,7 +240,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.tristream-append.geom.out b/Test/baseResults/hlsl.tristream-append.geom.out
index 53e8c04..630f2d3 100644
--- a/Test/baseResults/hlsl.tristream-append.geom.out
+++ b/Test/baseResults/hlsl.tristream-append.geom.out
@@ -157,7 +157,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 66
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out
index 424b848..07f1909 100644
--- a/Test/baseResults/hlsl.tx.bracket.frag.out
+++ b/Test/baseResults/hlsl.tx.bracket.frag.out
@@ -422,7 +422,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 188
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.tx.overload.frag.out b/Test/baseResults/hlsl.tx.overload.frag.out
index 7fb0640..df1bb20 100644
--- a/Test/baseResults/hlsl.tx.overload.frag.out
+++ b/Test/baseResults/hlsl.tx.overload.frag.out
@@ -134,7 +134,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.half.frag.out b/Test/baseResults/hlsl.type.half.frag.out
index 68f1b24..f12838b 100644
--- a/Test/baseResults/hlsl.type.half.frag.out
+++ b/Test/baseResults/hlsl.type.half.frag.out
@@ -164,7 +164,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.identifier.frag.out b/Test/baseResults/hlsl.type.identifier.frag.out
index 5705fb7..6130fda 100644
--- a/Test/baseResults/hlsl.type.identifier.frag.out
+++ b/Test/baseResults/hlsl.type.identifier.frag.out
@@ -266,7 +266,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 105
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
index 7320074..fe802db 100644
--- a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
+++ b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
@@ -1364,7 +1364,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 122
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.typeGraphCopy.vert.out b/Test/baseResults/hlsl.typeGraphCopy.vert.out
index cedf601..e380547 100644
--- a/Test/baseResults/hlsl.typeGraphCopy.vert.out
+++ b/Test/baseResults/hlsl.typeGraphCopy.vert.out
@@ -62,7 +62,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out
index d925124..ecb8dbd 100644
--- a/Test/baseResults/hlsl.typedef.frag.out
+++ b/Test/baseResults/hlsl.typedef.frag.out
@@ -79,7 +79,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.void.frag.out b/Test/baseResults/hlsl.void.frag.out
index f93cca0..48c43c6 100644
--- a/Test/baseResults/hlsl.void.frag.out
+++ b/Test/baseResults/hlsl.void.frag.out
@@ -54,7 +54,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.w-recip.frag.out b/Test/baseResults/hlsl.w-recip.frag.out
new file mode 100644
index 0000000..a4fc494
--- /dev/null
+++ b/Test/baseResults/hlsl.w-recip.frag.out
@@ -0,0 +1,268 @@
+hlsl.w-recip.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:5    Function Parameters: 
+0:5      'vpos' ( in 4-component vector of float)
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child ( temp 4-component vector of float)
+0:6          'vpos_t' ( temp 4-component vector of float)
+0:6          Construct vec4 ( temp 4-component vector of float)
+0:6            vector swizzle ( temp 3-component vector of float)
+0:6              'vpos' ( in 4-component vector of float)
+0:6              Sequence
+0:6                Constant:
+0:6                  0 (const int)
+0:6                Constant:
+0:6                  1 (const int)
+0:6                Constant:
+0:6                  2 (const int)
+0:6            divide ( temp float)
+0:6              Constant:
+0:6                1.000000
+0:6              direct index ( temp float)
+0:6                'vpos' ( in 4-component vector of float)
+0:6                Constant:
+0:6                  3 (const int)
+0:7      Test condition and select ( temp void)
+0:7        Condition
+0:7        Compare Less Than ( temp bool)
+0:7          direct index ( temp float)
+0:7            'vpos_t' ( temp 4-component vector of float)
+0:7            Constant:
+0:7              0 (const int)
+0:7          Constant:
+0:7            400.000000
+0:7        true case
+0:8        Branch: Return with expression
+0:8          AmbientColor: direct index for structure ( uniform 4-component vector of float)
+0:8            'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:8            Constant:
+0:8              0 (const uint)
+0:7        false case
+0:10        Branch: Return with expression
+0:10          AmbientColor2: direct index for structure ( uniform 4-component vector of float)
+0:10            'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:10            Constant:
+0:10              1 (const uint)
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 4-component vector of float)
+0:?         'vpos' ( temp 4-component vector of float)
+0:5        Construct vec4 ( temp 4-component vector of float)
+0:5          vector swizzle ( temp 3-component vector of float)
+0:?             'vpos' ( in 4-component vector of float FragCoord)
+0:5            Sequence
+0:5              Constant:
+0:5                0 (const int)
+0:5              Constant:
+0:5                1 (const int)
+0:5              Constant:
+0:5                2 (const int)
+0:5          divide ( temp float)
+0:5            Constant:
+0:5              1.000000
+0:5            direct index ( temp float)
+0:?               'vpos' ( in 4-component vector of float FragCoord)
+0:5              Constant:
+0:5                3 (const int)
+0:5      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:5        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'vpos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'vpos' ( in 4-component vector of float FragCoord)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:5    Function Parameters: 
+0:5      'vpos' ( in 4-component vector of float)
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child ( temp 4-component vector of float)
+0:6          'vpos_t' ( temp 4-component vector of float)
+0:6          Construct vec4 ( temp 4-component vector of float)
+0:6            vector swizzle ( temp 3-component vector of float)
+0:6              'vpos' ( in 4-component vector of float)
+0:6              Sequence
+0:6                Constant:
+0:6                  0 (const int)
+0:6                Constant:
+0:6                  1 (const int)
+0:6                Constant:
+0:6                  2 (const int)
+0:6            divide ( temp float)
+0:6              Constant:
+0:6                1.000000
+0:6              direct index ( temp float)
+0:6                'vpos' ( in 4-component vector of float)
+0:6                Constant:
+0:6                  3 (const int)
+0:7      Test condition and select ( temp void)
+0:7        Condition
+0:7        Compare Less Than ( temp bool)
+0:7          direct index ( temp float)
+0:7            'vpos_t' ( temp 4-component vector of float)
+0:7            Constant:
+0:7              0 (const int)
+0:7          Constant:
+0:7            400.000000
+0:7        true case
+0:8        Branch: Return with expression
+0:8          AmbientColor: direct index for structure ( uniform 4-component vector of float)
+0:8            'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:8            Constant:
+0:8              0 (const uint)
+0:7        false case
+0:10        Branch: Return with expression
+0:10          AmbientColor2: direct index for structure ( uniform 4-component vector of float)
+0:10            'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:10            Constant:
+0:10              1 (const uint)
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 4-component vector of float)
+0:?         'vpos' ( temp 4-component vector of float)
+0:5        Construct vec4 ( temp 4-component vector of float)
+0:5          vector swizzle ( temp 3-component vector of float)
+0:?             'vpos' ( in 4-component vector of float FragCoord)
+0:5            Sequence
+0:5              Constant:
+0:5                0 (const int)
+0:5              Constant:
+0:5                1 (const int)
+0:5              Constant:
+0:5                2 (const int)
+0:5          divide ( temp float)
+0:5            Constant:
+0:5              1.000000
+0:5            direct index ( temp float)
+0:?               'vpos' ( in 4-component vector of float FragCoord)
+0:5              Constant:
+0:5                3 (const int)
+0:5      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:5        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'vpos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'vpos' ( in 4-component vector of float FragCoord)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 69
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 53 65
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "vpos"
+                              Name 13  "vpos_t"
+                              Name 36  "$Global"
+                              MemberName 36($Global) 0  "AmbientColor"
+                              MemberName 36($Global) 1  "AmbientColor2"
+                              Name 38  ""
+                              Name 51  "vpos"
+                              Name 53  "vpos"
+                              Name 65  "@entryPointOutput"
+                              Name 66  "param"
+                              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 53(vpos) BuiltIn FragCoord
+                              Decorate 65(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              14:             TypeVector 6(float) 3
+              17:    6(float) Constant 1065353216
+              18:             TypeInt 32 0
+              19:     18(int) Constant 3
+              20:             TypePointer Function 6(float)
+              28:     18(int) Constant 0
+              31:    6(float) Constant 1137180672
+              32:             TypeBool
+     36($Global):             TypeStruct 7(fvec4) 7(fvec4)
+              37:             TypePointer Uniform 36($Global)
+              38:     37(ptr) Variable Uniform
+              39:             TypeInt 32 1
+              40:     39(int) Constant 0
+              41:             TypePointer Uniform 7(fvec4)
+              46:     39(int) Constant 1
+              52:             TypePointer Input 7(fvec4)
+        53(vpos):     52(ptr) Variable Input
+              56:             TypePointer Input 6(float)
+              64:             TypePointer Output 7(fvec4)
+65(@entryPointOutput):     64(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+        51(vpos):      8(ptr) Variable Function
+       66(param):      8(ptr) Variable Function
+              54:    7(fvec4) Load 53(vpos)
+              55:   14(fvec3) VectorShuffle 54 54 0 1 2
+              57:     56(ptr) AccessChain 53(vpos) 19
+              58:    6(float) Load 57
+              59:    6(float) FDiv 17 58
+              60:    6(float) CompositeExtract 55 0
+              61:    6(float) CompositeExtract 55 1
+              62:    6(float) CompositeExtract 55 2
+              63:    7(fvec4) CompositeConstruct 60 61 62 59
+                              Store 51(vpos) 63
+              67:    7(fvec4) Load 51(vpos)
+                              Store 66(param) 67
+              68:    7(fvec4) FunctionCall 11(@main(vf4;) 66(param)
+                              Store 65(@entryPointOutput) 68
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):    7(fvec4) Function None 9
+        10(vpos):      8(ptr) FunctionParameter
+              12:             Label
+      13(vpos_t):      8(ptr) Variable Function
+              15:    7(fvec4) Load 10(vpos)
+              16:   14(fvec3) VectorShuffle 15 15 0 1 2
+              21:     20(ptr) AccessChain 10(vpos) 19
+              22:    6(float) Load 21
+              23:    6(float) FDiv 17 22
+              24:    6(float) CompositeExtract 16 0
+              25:    6(float) CompositeExtract 16 1
+              26:    6(float) CompositeExtract 16 2
+              27:    7(fvec4) CompositeConstruct 24 25 26 23
+                              Store 13(vpos_t) 27
+              29:     20(ptr) AccessChain 13(vpos_t) 28
+              30:    6(float) Load 29
+              33:    32(bool) FOrdLessThan 30 31
+                              SelectionMerge 35 None
+                              BranchConditional 33 34 45
+              34:               Label
+              42:     41(ptr)   AccessChain 38 40
+              43:    7(fvec4)   Load 42
+                                ReturnValue 43
+              45:               Label
+              47:     41(ptr)   AccessChain 38 46
+              48:    7(fvec4)   Load 47
+                                ReturnValue 48
+              35:             Label
+                              Unreachable
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.w-recip2.frag.out b/Test/baseResults/hlsl.w-recip2.frag.out
new file mode 100644
index 0000000..2157ce4
--- /dev/null
+++ b/Test/baseResults/hlsl.w-recip2.frag.out
@@ -0,0 +1,305 @@
+hlsl.w-recip2.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:13  Function Definition: @main(struct-VSOutput-vf4-vf3-vf3-vf21; ( temp 4-component vector of float)
+0:13    Function Parameters: 
+0:13      'VSOut' ( in structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:?     Sequence
+0:14      Test condition and select ( temp void)
+0:14        Condition
+0:14        Compare Less Than ( temp bool)
+0:14          direct index ( temp float)
+0:14            PositionPS: direct index for structure ( temp 4-component vector of float)
+0:14              'VSOut' ( in structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:14              Constant:
+0:14                0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            400.000000
+0:14        true case
+0:15        Branch: Return with expression
+0:15          AmbientColor: direct index for structure ( uniform 4-component vector of float)
+0:15            'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:15            Constant:
+0:15              0 (const uint)
+0:14        false case
+0:17        Branch: Return with expression
+0:17          AmbientColor2: direct index for structure ( uniform 4-component vector of float)
+0:17            'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:17            Constant:
+0:17              1 (const uint)
+0:13  Function Definition: main( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        Sequence
+0:13          move second child to first child ( temp 4-component vector of float)
+0:13            '@fragcoord' ( temp 4-component vector of float)
+0:?             'VSOut.PositionPS' ( in 4-component vector of float FragCoord)
+0:13          move second child to first child ( temp float)
+0:13            direct index ( in float FragCoord)
+0:13              '@fragcoord' ( temp 4-component vector of float)
+0:13              Constant:
+0:13                3 (const int)
+0:13            divide ( temp float)
+0:13              Constant:
+0:13                1.000000
+0:13              direct index ( in float FragCoord)
+0:13                '@fragcoord' ( temp 4-component vector of float)
+0:13                Constant:
+0:13                  3 (const int)
+0:13          move second child to first child ( temp 4-component vector of float)
+0:13            PositionPS: direct index for structure ( temp 4-component vector of float)
+0:?               'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:13              Constant:
+0:13                0 (const int)
+0:13            '@fragcoord' ( temp 4-component vector of float)
+0:13        move second child to first child ( temp 3-component vector of float)
+0:13          PosInLightViewSpace: direct index for structure ( temp 3-component vector of float)
+0:?             'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:13            Constant:
+0:13              1 (const int)
+0:?           'VSOut.PosInLightViewSpace' (layout( location=0) in 3-component vector of float)
+0:13        move second child to first child ( temp 3-component vector of float)
+0:13          NormalWS: direct index for structure ( temp 3-component vector of float)
+0:?             'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:13            Constant:
+0:13              2 (const int)
+0:?           'VSOut.NormalWS' (layout( location=1) in 3-component vector of float)
+0:13        move second child to first child ( temp 2-component vector of float)
+0:13          TexCoord: direct index for structure ( temp 2-component vector of float)
+0:?             'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:13            Constant:
+0:13              3 (const int)
+0:?           'VSOut.TexCoord' (layout( location=2) in 2-component vector of float)
+0:13      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:13        Function Call: @main(struct-VSOutput-vf4-vf3-vf3-vf21; ( temp 4-component vector of float)
+0:?           'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'VSOut.PositionPS' ( in 4-component vector of float FragCoord)
+0:?     'VSOut.PosInLightViewSpace' (layout( location=0) in 3-component vector of float)
+0:?     'VSOut.NormalWS' (layout( location=1) in 3-component vector of float)
+0:?     'VSOut.TexCoord' (layout( location=2) in 2-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:13  Function Definition: @main(struct-VSOutput-vf4-vf3-vf3-vf21; ( temp 4-component vector of float)
+0:13    Function Parameters: 
+0:13      'VSOut' ( in structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:?     Sequence
+0:14      Test condition and select ( temp void)
+0:14        Condition
+0:14        Compare Less Than ( temp bool)
+0:14          direct index ( temp float)
+0:14            PositionPS: direct index for structure ( temp 4-component vector of float)
+0:14              'VSOut' ( in structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:14              Constant:
+0:14                0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            400.000000
+0:14        true case
+0:15        Branch: Return with expression
+0:15          AmbientColor: direct index for structure ( uniform 4-component vector of float)
+0:15            'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:15            Constant:
+0:15              0 (const uint)
+0:14        false case
+0:17        Branch: Return with expression
+0:17          AmbientColor2: direct index for structure ( uniform 4-component vector of float)
+0:17            'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:17            Constant:
+0:17              1 (const uint)
+0:13  Function Definition: main( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        Sequence
+0:13          move second child to first child ( temp 4-component vector of float)
+0:13            '@fragcoord' ( temp 4-component vector of float)
+0:?             'VSOut.PositionPS' ( in 4-component vector of float FragCoord)
+0:13          move second child to first child ( temp float)
+0:13            direct index ( in float FragCoord)
+0:13              '@fragcoord' ( temp 4-component vector of float)
+0:13              Constant:
+0:13                3 (const int)
+0:13            divide ( temp float)
+0:13              Constant:
+0:13                1.000000
+0:13              direct index ( in float FragCoord)
+0:13                '@fragcoord' ( temp 4-component vector of float)
+0:13                Constant:
+0:13                  3 (const int)
+0:13          move second child to first child ( temp 4-component vector of float)
+0:13            PositionPS: direct index for structure ( temp 4-component vector of float)
+0:?               'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:13              Constant:
+0:13                0 (const int)
+0:13            '@fragcoord' ( temp 4-component vector of float)
+0:13        move second child to first child ( temp 3-component vector of float)
+0:13          PosInLightViewSpace: direct index for structure ( temp 3-component vector of float)
+0:?             'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:13            Constant:
+0:13              1 (const int)
+0:?           'VSOut.PosInLightViewSpace' (layout( location=0) in 3-component vector of float)
+0:13        move second child to first child ( temp 3-component vector of float)
+0:13          NormalWS: direct index for structure ( temp 3-component vector of float)
+0:?             'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:13            Constant:
+0:13              2 (const int)
+0:?           'VSOut.NormalWS' (layout( location=1) in 3-component vector of float)
+0:13        move second child to first child ( temp 2-component vector of float)
+0:13          TexCoord: direct index for structure ( temp 2-component vector of float)
+0:?             'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:13            Constant:
+0:13              3 (const int)
+0:?           'VSOut.TexCoord' (layout( location=2) in 2-component vector of float)
+0:13      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:13        Function Call: @main(struct-VSOutput-vf4-vf3-vf3-vf21; ( temp 4-component vector of float)
+0:?           'VSOut' ( temp structure{ temp 4-component vector of float PositionPS,  temp 3-component vector of float PosInLightViewSpace,  temp 3-component vector of float NormalWS,  temp 2-component vector of float TexCoord})
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform 4-component vector of float AmbientColor2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'VSOut.PositionPS' ( in 4-component vector of float FragCoord)
+0:?     'VSOut.PosInLightViewSpace' (layout( location=0) in 3-component vector of float)
+0:?     'VSOut.NormalWS' (layout( location=1) in 3-component vector of float)
+0:?     'VSOut.TexCoord' (layout( location=2) in 2-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 75
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 44 56 61 66 71
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 10  "VSOutput"
+                              MemberName 10(VSOutput) 0  "PositionPS"
+                              MemberName 10(VSOutput) 1  "PosInLightViewSpace"
+                              MemberName 10(VSOutput) 2  "NormalWS"
+                              MemberName 10(VSOutput) 3  "TexCoord"
+                              Name 14  "@main(struct-VSOutput-vf4-vf3-vf3-vf21;"
+                              Name 13  "VSOut"
+                              Name 28  "$Global"
+                              MemberName 28($Global) 0  "AmbientColor"
+                              MemberName 28($Global) 1  "AmbientColor2"
+                              Name 30  ""
+                              Name 42  "@fragcoord"
+                              Name 44  "VSOut.PositionPS"
+                              Name 52  "VSOut"
+                              Name 56  "VSOut.PosInLightViewSpace"
+                              Name 61  "VSOut.NormalWS"
+                              Name 66  "VSOut.TexCoord"
+                              Name 71  "@entryPointOutput"
+                              Name 72  "param"
+                              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 44(VSOut.PositionPS) BuiltIn FragCoord
+                              Decorate 56(VSOut.PosInLightViewSpace) Location 0
+                              Decorate 61(VSOut.NormalWS) Location 1
+                              Decorate 66(VSOut.TexCoord) Location 2
+                              Decorate 71(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeVector 6(float) 3
+               9:             TypeVector 6(float) 2
+    10(VSOutput):             TypeStruct 7(fvec4) 8(fvec3) 8(fvec3) 9(fvec2)
+              11:             TypePointer Function 10(VSOutput)
+              12:             TypeFunction 7(fvec4) 11(ptr)
+              16:             TypeInt 32 1
+              17:     16(int) Constant 0
+              18:             TypeInt 32 0
+              19:     18(int) Constant 0
+              20:             TypePointer Function 6(float)
+              23:    6(float) Constant 1137180672
+              24:             TypeBool
+     28($Global):             TypeStruct 7(fvec4) 7(fvec4)
+              29:             TypePointer Uniform 28($Global)
+              30:     29(ptr) Variable Uniform
+              31:             TypePointer Uniform 7(fvec4)
+              36:     16(int) Constant 1
+              41:             TypePointer Function 7(fvec4)
+              43:             TypePointer Input 7(fvec4)
+44(VSOut.PositionPS):     43(ptr) Variable Input
+              46:    6(float) Constant 1065353216
+              47:     18(int) Constant 3
+              55:             TypePointer Input 8(fvec3)
+56(VSOut.PosInLightViewSpace):     55(ptr) Variable Input
+              58:             TypePointer Function 8(fvec3)
+              60:     16(int) Constant 2
+61(VSOut.NormalWS):     55(ptr) Variable Input
+              64:     16(int) Constant 3
+              65:             TypePointer Input 9(fvec2)
+66(VSOut.TexCoord):     65(ptr) Variable Input
+              68:             TypePointer Function 9(fvec2)
+              70:             TypePointer Output 7(fvec4)
+71(@entryPointOutput):     70(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+  42(@fragcoord):     41(ptr) Variable Function
+       52(VSOut):     11(ptr) Variable Function
+       72(param):     11(ptr) Variable Function
+              45:    7(fvec4) Load 44(VSOut.PositionPS)
+                              Store 42(@fragcoord) 45
+              48:     20(ptr) AccessChain 42(@fragcoord) 47
+              49:    6(float) Load 48
+              50:    6(float) FDiv 46 49
+              51:     20(ptr) AccessChain 42(@fragcoord) 47
+                              Store 51 50
+              53:    7(fvec4) Load 42(@fragcoord)
+              54:     41(ptr) AccessChain 52(VSOut) 17
+                              Store 54 53
+              57:    8(fvec3) Load 56(VSOut.PosInLightViewSpace)
+              59:     58(ptr) AccessChain 52(VSOut) 36
+                              Store 59 57
+              62:    8(fvec3) Load 61(VSOut.NormalWS)
+              63:     58(ptr) AccessChain 52(VSOut) 60
+                              Store 63 62
+              67:    9(fvec2) Load 66(VSOut.TexCoord)
+              69:     68(ptr) AccessChain 52(VSOut) 64
+                              Store 69 67
+              73:10(VSOutput) Load 52(VSOut)
+                              Store 72(param) 73
+              74:    7(fvec4) FunctionCall 14(@main(struct-VSOutput-vf4-vf3-vf3-vf21;) 72(param)
+                              Store 71(@entryPointOutput) 74
+                              Return
+                              FunctionEnd
+14(@main(struct-VSOutput-vf4-vf3-vf3-vf21;):    7(fvec4) Function None 12
+       13(VSOut):     11(ptr) FunctionParameter
+              15:             Label
+              21:     20(ptr) AccessChain 13(VSOut) 17 19
+              22:    6(float) Load 21
+              25:    24(bool) FOrdLessThan 22 23
+                              SelectionMerge 27 None
+                              BranchConditional 25 26 35
+              26:               Label
+              32:     31(ptr)   AccessChain 30 17
+              33:    7(fvec4)   Load 32
+                                ReturnValue 33
+              35:               Label
+              37:     31(ptr)   AccessChain 30 36
+              38:    7(fvec4)   Load 37
+                                ReturnValue 38
+              27:             Label
+                              Unreachable
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavebroadcast.comp.out b/Test/baseResults/hlsl.wavebroadcast.comp.out
index 01bc953..49d3b87 100644
--- a/Test/baseResults/hlsl.wavebroadcast.comp.out
+++ b/Test/baseResults/hlsl.wavebroadcast.comp.out
@@ -2298,7 +2298,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 393
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out
index cc4737e..e2991bf 100644
--- a/Test/baseResults/hlsl.waveprefix.comp.out
+++ b/Test/baseResults/hlsl.waveprefix.comp.out
@@ -1126,7 +1126,7 @@
 0:54              0 (const int)
 0:54          Constant:
 0:54            0 (const int)
-0:54        subgroupBallotInclusiveBitCount ( temp uint)
+0:54        subgroupBallotExclusiveBitCount ( temp uint)
 0:54          subgroupBallot ( temp 4-component vector of uint)
 0:54            Compare Equal ( temp bool)
 0:54              direct index ( temp uint)
@@ -2289,7 +2289,7 @@
 0:54              0 (const int)
 0:54          Constant:
 0:54            0 (const int)
-0:54        subgroupBallotInclusiveBitCount ( temp uint)
+0:54        subgroupBallotExclusiveBitCount ( temp uint)
 0:54          subgroupBallot ( temp 4-component vector of uint)
 0:54            Compare Equal ( temp bool)
 0:54              direct index ( temp uint)
@@ -2322,7 +2322,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 403
 
                               Capability Shader
@@ -2818,7 +2818,7 @@
              390:      6(int) Load 389
              392:   391(bool) IEqual 390 26
              393:   13(ivec4) GroupNonUniformBallot 35 392
-             394:      6(int) GroupNonUniformBallotBitCount 35 InclusiveScan 393
+             394:      6(int) GroupNonUniformBallotBitCount 35 ExclusiveScan 393
              395:     42(ptr) AccessChain 24(data) 25 386 25 26
                               Store 395 394
                               Return
diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out
index e4311c7..6d4ab5b 100644
--- a/Test/baseResults/hlsl.wavequad.comp.out
+++ b/Test/baseResults/hlsl.wavequad.comp.out
@@ -8026,7 +8026,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 1232
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavequery.comp.out b/Test/baseResults/hlsl.wavequery.comp.out
index dcd11ae..a380808 100644
--- a/Test/baseResults/hlsl.wavequery.comp.out
+++ b/Test/baseResults/hlsl.wavequery.comp.out
@@ -60,7 +60,7 @@
 0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavequery.frag.out b/Test/baseResults/hlsl.wavequery.frag.out
index df1b596..bb5147a 100644
--- a/Test/baseResults/hlsl.wavequery.frag.out
+++ b/Test/baseResults/hlsl.wavequery.frag.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out
index 64a4e7c..a4393fe 100644
--- a/Test/baseResults/hlsl.wavereduction.comp.out
+++ b/Test/baseResults/hlsl.wavereduction.comp.out
@@ -6186,7 +6186,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 991
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavevote.comp.out b/Test/baseResults/hlsl.wavevote.comp.out
index 83140a2..f9382b7 100644
--- a/Test/baseResults/hlsl.wavevote.comp.out
+++ b/Test/baseResults/hlsl.wavevote.comp.out
@@ -204,7 +204,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 75
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out
index 23825e8..1f9a36b 100644
--- a/Test/baseResults/hlsl.whileLoop.frag.out
+++ b/Test/baseResults/hlsl.whileLoop.frag.out
@@ -96,7 +96,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-1.vert.out b/Test/baseResults/hlsl.y-negate-1.vert.out
index aefde04..e000752 100644
--- a/Test/baseResults/hlsl.y-negate-1.vert.out
+++ b/Test/baseResults/hlsl.y-negate-1.vert.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-2.vert.out b/Test/baseResults/hlsl.y-negate-2.vert.out
index 4a9ef61..57a47ab 100644
--- a/Test/baseResults/hlsl.y-negate-2.vert.out
+++ b/Test/baseResults/hlsl.y-negate-2.vert.out
@@ -80,7 +80,7 @@
 0:?     'position' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-3.vert.out b/Test/baseResults/hlsl.y-negate-3.vert.out
index 3544910..3e58951 100644
--- a/Test/baseResults/hlsl.y-negate-3.vert.out
+++ b/Test/baseResults/hlsl.y-negate-3.vert.out
@@ -126,7 +126,7 @@
 0:?     '@entryPointOutput.somethingelse' (layout( location=0) out int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/iomap.blockOutVariableIn.2.vert.out b/Test/baseResults/iomap.blockOutVariableIn.2.vert.out
new file mode 100644
index 0000000..2c4ecdc
--- /dev/null
+++ b/Test/baseResults/iomap.blockOutVariableIn.2.vert.out
@@ -0,0 +1,413 @@
+iomap.blockOutVariableIn.2.vert
+Shader version: 440
+0:? Sequence
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      move second child to first child ( temp 4-component vector of float)
+0:11        a1: direct index for structure ( out 4-component vector of float)
+0:11          'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+0:11          Constant:
+0:11            0 (const uint)
+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 2-component vector of float)
+0:12        a2: direct index for structure ( out 2-component vector of float)
+0:12          'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+0:12          Constant:
+0:12            1 (const uint)
+0:12        Constant:
+0:12          0.500000
+0:12          0.500000
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:13          '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})
+0:13          Constant:
+0:13            0 (const uint)
+0:13        Constant:
+0:13          1.000000
+0:13          1.000000
+0:13          1.000000
+0:13          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+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})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+iomap.blockOutVariableIn.geom
+Shader version: 440
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp 4-component vector of float)
+0:14        'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:14        direct index (layout( location=0) temp 4-component vector of float)
+0:14          'in_a1' (layout( location=0) in 3-element array of 4-component vector of float)
+0:14          Constant:
+0:14            0 (const int)
+0:15      move second child to first child ( temp 2-component vector of float)
+0:15        'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:15        direct index (layout( location=1) temp 2-component vector of float)
+0:15          'in_a2' (layout( location=1) in 3-element array of 2-component vector of float)
+0:15          Constant:
+0:15            0 (const int)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
+0:16          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:16          Constant:
+0:16            0 (const uint)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      EmitVertex ( global void)
+0:19      move second child to first child ( temp 4-component vector of float)
+0:19        'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:19        direct index (layout( location=0) temp 4-component vector of float)
+0:19          'in_a1' (layout( location=0) in 3-element array of 4-component vector of float)
+0:19          Constant:
+0:19            1 (const int)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:20        direct index (layout( location=1) temp 2-component vector of float)
+0:20          'in_a2' (layout( location=1) in 3-element array of 2-component vector of float)
+0:20          Constant:
+0:20            1 (const int)
+0:21      move second child to first child ( temp 4-component vector of float)
+0:21        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
+0:21          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:21          Constant:
+0:21            0 (const uint)
+0:21        Constant:
+0:21          1.000000
+0:21          1.000000
+0:21          1.000000
+0:21          1.000000
+0:22      EmitVertex ( global void)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:24        direct index (layout( location=0) temp 4-component vector of float)
+0:24          'in_a1' (layout( location=0) in 3-element array of 4-component vector of float)
+0:24          Constant:
+0:24            2 (const int)
+0:25      move second child to first child ( temp 2-component vector of float)
+0:25        'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:25        direct index (layout( location=1) temp 2-component vector of float)
+0:25          'in_a2' (layout( location=1) in 3-element array of 2-component vector of float)
+0:25          Constant:
+0:25            2 (const int)
+0:26      move second child to first child ( temp 4-component vector of float)
+0:26        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
+0:26          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:26          Constant:
+0:26            0 (const uint)
+0:26        Constant:
+0:26          1.000000
+0:26          1.000000
+0:26          1.000000
+0:26          1.000000
+0:27      EmitVertex ( global void)
+0:?   Linker Objects
+0:?     'in_a1' (layout( location=0) in 3-element array of 4-component vector of float)
+0:?     'in_a2' (layout( location=1) in 3-element array of 2-component vector of float)
+0:?     'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:?     'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+
+
+Linked vertex stage:
+
+
+Linked geometry stage:
+
+
+Shader version: 440
+0:? Sequence
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      move second child to first child ( temp 4-component vector of float)
+0:11        a1: direct index for structure ( out 4-component vector of float)
+0:11          'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+0:11          Constant:
+0:11            0 (const uint)
+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 2-component vector of float)
+0:12        a2: direct index for structure ( out 2-component vector of float)
+0:12          'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+0:12          Constant:
+0:12            1 (const uint)
+0:12        Constant:
+0:12          0.500000
+0:12          0.500000
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:13          '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})
+0:13          Constant:
+0:13            0 (const uint)
+0:13        Constant:
+0:13          1.000000
+0:13          1.000000
+0:13          1.000000
+0:13          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+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})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+Shader version: 440
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp 4-component vector of float)
+0:14        'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:14        direct index (layout( location=0) temp 4-component vector of float)
+0:14          'in_a1' (layout( location=0) in 3-element array of 4-component vector of float)
+0:14          Constant:
+0:14            0 (const int)
+0:15      move second child to first child ( temp 2-component vector of float)
+0:15        'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:15        direct index (layout( location=1) temp 2-component vector of float)
+0:15          'in_a2' (layout( location=1) in 3-element array of 2-component vector of float)
+0:15          Constant:
+0:15            0 (const int)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
+0:16          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+0:16          Constant:
+0:16            0 (const uint)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      EmitVertex ( global void)
+0:19      move second child to first child ( temp 4-component vector of float)
+0:19        'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:19        direct index (layout( location=0) temp 4-component vector of float)
+0:19          'in_a1' (layout( location=0) in 3-element array of 4-component vector of float)
+0:19          Constant:
+0:19            1 (const int)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:20        direct index (layout( location=1) temp 2-component vector of float)
+0:20          'in_a2' (layout( location=1) in 3-element array of 2-component vector of float)
+0:20          Constant:
+0:20            1 (const int)
+0:21      move second child to first child ( temp 4-component vector of float)
+0:21        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
+0:21          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+0:21          Constant:
+0:21            0 (const uint)
+0:21        Constant:
+0:21          1.000000
+0:21          1.000000
+0:21          1.000000
+0:21          1.000000
+0:22      EmitVertex ( global void)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:24        direct index (layout( location=0) temp 4-component vector of float)
+0:24          'in_a1' (layout( location=0) in 3-element array of 4-component vector of float)
+0:24          Constant:
+0:24            2 (const int)
+0:25      move second child to first child ( temp 2-component vector of float)
+0:25        'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:25        direct index (layout( location=1) temp 2-component vector of float)
+0:25          'in_a2' (layout( location=1) in 3-element array of 2-component vector of float)
+0:25          Constant:
+0:25            2 (const int)
+0:26      move second child to first child ( temp 4-component vector of float)
+0:26        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
+0:26          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+0:26          Constant:
+0:26            0 (const uint)
+0:26        Constant:
+0:26          1.000000
+0:26          1.000000
+0:26          1.000000
+0:26          1.000000
+0:27      EmitVertex ( global void)
+0:?   Linker Objects
+0:?     'in_a1' (layout( location=0) in 3-element array of 4-component vector of float)
+0:?     'in_a2' (layout( location=1) in 3-element array of 2-component vector of float)
+0:?     'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:?     'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 33
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 11 28 31 32
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "Block"
+                              MemberName 9(Block) 0  "a1"
+                              MemberName 9(Block) 1  "a2"
+                              Name 11  ""
+                              Name 26  "gl_PerVertex"
+                              MemberName 26(gl_PerVertex) 0  "gl_Position"
+                              MemberName 26(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 26(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 28  ""
+                              Name 31  "gl_VertexID"
+                              Name 32  "gl_InstanceID"
+                              Decorate 9(Block) Block
+                              Decorate 11 Location 0
+                              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
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeVector 6(float) 2
+        9(Block):             TypeStruct 7(fvec4) 8(fvec2)
+              10:             TypePointer Output 9(Block)
+              11:     10(ptr) Variable Output
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:    6(float) Constant 1065353216
+              15:    7(fvec4) ConstantComposite 14 14 14 14
+              16:             TypePointer Output 7(fvec4)
+              18:     12(int) Constant 1
+              19:    6(float) Constant 1056964608
+              20:    8(fvec2) ConstantComposite 19 19
+              21:             TypePointer Output 8(fvec2)
+              23:             TypeInt 32 0
+              24:     23(int) Constant 1
+              25:             TypeArray 6(float) 24
+26(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 25
+              27:             TypePointer Output 26(gl_PerVertex)
+              28:     27(ptr) Variable Output
+              30:             TypePointer Input 12(int)
+ 31(gl_VertexID):     30(ptr) Variable Input
+32(gl_InstanceID):     30(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              17:     16(ptr) AccessChain 11 13
+                              Store 17 15
+              22:     21(ptr) AccessChain 11 18
+                              Store 22 20
+              29:     16(ptr) AccessChain 28 13
+                              Store 29 15
+                              Return
+                              FunctionEnd
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 49
+
+                              Capability Geometry
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 9 14 22 25 33
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputTriangleStrip
+                              ExecutionMode 4 OutputVertices 3
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "a1"
+                              Name 14  "in_a1"
+                              Name 22  "a2"
+                              Name 25  "in_a2"
+                              Name 31  "gl_PerVertex"
+                              MemberName 31(gl_PerVertex) 0  "gl_Position"
+                              MemberName 31(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 31(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 33  ""
+                              Decorate 9(a1) Location 0
+                              Decorate 14(in_a1) Location 0
+                              Decorate 22(a2) Location 1
+                              Decorate 25(in_a2) Location 1
+                              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
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+           9(a1):      8(ptr) Variable Output
+              10:             TypeInt 32 0
+              11:     10(int) Constant 3
+              12:             TypeArray 7(fvec4) 11
+              13:             TypePointer Input 12
+       14(in_a1):     13(ptr) Variable Input
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+              17:             TypePointer Input 7(fvec4)
+              20:             TypeVector 6(float) 2
+              21:             TypePointer Output 20(fvec2)
+          22(a2):     21(ptr) Variable Output
+              23:             TypeArray 20(fvec2) 11
+              24:             TypePointer Input 23
+       25(in_a2):     24(ptr) Variable Input
+              26:             TypePointer Input 20(fvec2)
+              29:     10(int) Constant 1
+              30:             TypeArray 6(float) 29
+31(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 30
+              32:             TypePointer Output 31(gl_PerVertex)
+              33:     32(ptr) Variable Output
+              34:    6(float) Constant 1065353216
+              35:    7(fvec4) ConstantComposite 34 34 34 34
+              37:     15(int) Constant 1
+              43:     15(int) Constant 2
+         4(main):           2 Function None 3
+               5:             Label
+              18:     17(ptr) AccessChain 14(in_a1) 16
+              19:    7(fvec4) Load 18
+                              Store 9(a1) 19
+              27:     26(ptr) AccessChain 25(in_a2) 16
+              28:   20(fvec2) Load 27
+                              Store 22(a2) 28
+              36:      8(ptr) AccessChain 33 16
+                              Store 36 35
+                              EmitVertex
+              38:     17(ptr) AccessChain 14(in_a1) 37
+              39:    7(fvec4) Load 38
+                              Store 9(a1) 39
+              40:     26(ptr) AccessChain 25(in_a2) 37
+              41:   20(fvec2) Load 40
+                              Store 22(a2) 41
+              42:      8(ptr) AccessChain 33 16
+                              Store 42 35
+                              EmitVertex
+              44:     17(ptr) AccessChain 14(in_a1) 43
+              45:    7(fvec4) Load 44
+                              Store 9(a1) 45
+              46:     26(ptr) AccessChain 25(in_a2) 43
+              47:   20(fvec2) Load 46
+                              Store 22(a2) 47
+              48:      8(ptr) AccessChain 33 16
+                              Store 48 35
+                              EmitVertex
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/iomap.blockOutVariableIn.vert.out b/Test/baseResults/iomap.blockOutVariableIn.vert.out
new file mode 100644
index 0000000..a43e52f
--- /dev/null
+++ b/Test/baseResults/iomap.blockOutVariableIn.vert.out
@@ -0,0 +1,234 @@
+iomap.blockOutVariableIn.vert
+Shader version: 440
+0:? Sequence
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      move second child to first child ( temp 4-component vector of float)
+0:11        a1: direct index for structure ( out 4-component vector of float)
+0:11          'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+0:11          Constant:
+0:11            0 (const uint)
+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 2-component vector of float)
+0:12        a2: direct index for structure ( out 2-component vector of float)
+0:12          'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+0:12          Constant:
+0:12            1 (const uint)
+0:12        Constant:
+0:12          0.500000
+0:12          0.500000
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:13          '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})
+0:13          Constant:
+0:13            0 (const uint)
+0:13        Constant:
+0:13          1.000000
+0:13          1.000000
+0:13          1.000000
+0:13          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+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})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+iomap.blockOutVariableIn.frag
+Shader version: 440
+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 4-component vector of float)
+0:10        'color' (layout( location=0) out 4-component vector of float)
+0:10        Construct vec4 ( temp 4-component vector of float)
+0:10          vector swizzle ( temp 2-component vector of float)
+0:10            'a1' (layout( location=0) smooth in 4-component vector of float)
+0:10            Sequence
+0:10              Constant:
+0:10                0 (const int)
+0:10              Constant:
+0:10                1 (const int)
+0:10          'a2' (layout( location=1) smooth in 2-component vector of float)
+0:?   Linker Objects
+0:?     'a1' (layout( location=0) smooth in 4-component vector of float)
+0:?     'a2' (layout( location=1) smooth in 2-component vector of float)
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Linked fragment stage:
+
+
+Shader version: 440
+0:? Sequence
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      move second child to first child ( temp 4-component vector of float)
+0:11        a1: direct index for structure ( out 4-component vector of float)
+0:11          'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+0:11          Constant:
+0:11            0 (const uint)
+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 2-component vector of float)
+0:12        a2: direct index for structure ( out 2-component vector of float)
+0:12          'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+0:12          Constant:
+0:12            1 (const uint)
+0:12        Constant:
+0:12          0.500000
+0:12          0.500000
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:13          '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})
+0:13          Constant:
+0:13            0 (const uint)
+0:13        Constant:
+0:13          1.000000
+0:13          1.000000
+0:13          1.000000
+0:13          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( location=0) out block{ out 4-component vector of float a1,  out 2-component vector of float a2})
+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})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+Shader version: 440
+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 4-component vector of float)
+0:10        'color' (layout( location=0) out 4-component vector of float)
+0:10        Construct vec4 ( temp 4-component vector of float)
+0:10          vector swizzle ( temp 2-component vector of float)
+0:10            'a1' (layout( location=0) smooth in 4-component vector of float)
+0:10            Sequence
+0:10              Constant:
+0:10                0 (const int)
+0:10              Constant:
+0:10                1 (const int)
+0:10          'a2' (layout( location=1) smooth in 2-component vector of float)
+0:?   Linker Objects
+0:?     'a1' (layout( location=0) smooth in 4-component vector of float)
+0:?     'a2' (layout( location=1) smooth in 2-component vector of float)
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 33
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 11 28 31 32
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "Block"
+                              MemberName 9(Block) 0  "a1"
+                              MemberName 9(Block) 1  "a2"
+                              Name 11  ""
+                              Name 26  "gl_PerVertex"
+                              MemberName 26(gl_PerVertex) 0  "gl_Position"
+                              MemberName 26(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 26(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 28  ""
+                              Name 31  "gl_VertexID"
+                              Name 32  "gl_InstanceID"
+                              Decorate 9(Block) Block
+                              Decorate 11 Location 0
+                              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
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeVector 6(float) 2
+        9(Block):             TypeStruct 7(fvec4) 8(fvec2)
+              10:             TypePointer Output 9(Block)
+              11:     10(ptr) Variable Output
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:    6(float) Constant 1065353216
+              15:    7(fvec4) ConstantComposite 14 14 14 14
+              16:             TypePointer Output 7(fvec4)
+              18:     12(int) Constant 1
+              19:    6(float) Constant 1056964608
+              20:    8(fvec2) ConstantComposite 19 19
+              21:             TypePointer Output 8(fvec2)
+              23:             TypeInt 32 0
+              24:     23(int) Constant 1
+              25:             TypeArray 6(float) 24
+26(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 25
+              27:             TypePointer Output 26(gl_PerVertex)
+              28:     27(ptr) Variable Output
+              30:             TypePointer Input 12(int)
+ 31(gl_VertexID):     30(ptr) Variable Input
+32(gl_InstanceID):     30(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              17:     16(ptr) AccessChain 11 13
+                              Store 17 15
+              22:     21(ptr) AccessChain 11 18
+                              Store 22 20
+              29:     16(ptr) AccessChain 28 13
+                              Store 29 15
+                              Return
+                              FunctionEnd
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 23
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 11 16
+                              ExecutionMode 4 OriginLowerLeft
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "color"
+                              Name 11  "a1"
+                              Name 16  "a2"
+                              Decorate 9(color) Location 0
+                              Decorate 11(a1) Location 0
+                              Decorate 16(a2) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(color):      8(ptr) Variable Output
+              10:             TypePointer Input 7(fvec4)
+          11(a1):     10(ptr) Variable Input
+              12:             TypeVector 6(float) 2
+              15:             TypePointer Input 12(fvec2)
+          16(a2):     15(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              13:    7(fvec4) Load 11(a1)
+              14:   12(fvec2) VectorShuffle 13 13 0 1
+              17:   12(fvec2) Load 16(a2)
+              18:    6(float) CompositeExtract 14 0
+              19:    6(float) CompositeExtract 14 1
+              20:    6(float) CompositeExtract 17 0
+              21:    6(float) CompositeExtract 17 1
+              22:    7(fvec4) CompositeConstruct 18 19 20 21
+                              Store 9(color) 22
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/iomap.crossStage.2.vert.out b/Test/baseResults/iomap.crossStage.2.vert.out
index 325c1b4..171cc0e 100644
--- a/Test/baseResults/iomap.crossStage.2.vert.out
+++ b/Test/baseResults/iomap.crossStage.2.vert.out
@@ -207,8 +207,9 @@
 
 Linked fragment stage:
 
-WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names.
-    blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}"
+WARNING: Linking unknown stage and fragment stages: Matched shader interfaces are using different instance names.
+    unknown stage stage: Block: crossStageBlock2 Instance: blockName1: ""
+    fragment stage: Block: crossStageBlock2 Instance: blockName2: ""
 
 Shader version: 460
 0:? Sequence
@@ -406,7 +407,7 @@
 0:?     'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 56
 
                               Capability Shader
@@ -529,7 +530,7 @@
                               Return
                               FunctionEnd
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 65
 
                               Capability Geometry
@@ -658,7 +659,7 @@
                               Return
                               FunctionEnd
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/iomap.crossStage.vert.out b/Test/baseResults/iomap.crossStage.vert.out
index 5338b80..d6b6e4f 100644
--- a/Test/baseResults/iomap.crossStage.vert.out
+++ b/Test/baseResults/iomap.crossStage.vert.out
@@ -133,8 +133,9 @@
 
 Linked fragment stage:
 
-WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names.
-    blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}"
+WARNING: Linking unknown stage and fragment stages: Matched shader interfaces are using different instance names.
+    unknown stage stage: Block: crossStageBlock2 Instance: blockName1: ""
+    fragment stage: Block: crossStageBlock2 Instance: blockName2: ""
 
 Shader version: 460
 0:? Sequence
@@ -263,7 +264,7 @@
 0:?     'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 56
 
                               Capability Shader
@@ -386,7 +387,7 @@
                               Return
                               FunctionEnd
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/iomap.crossStage.vk.vert.out b/Test/baseResults/iomap.crossStage.vk.vert.out
index e137bdf..dd8029d 100644
--- a/Test/baseResults/iomap.crossStage.vk.vert.out
+++ b/Test/baseResults/iomap.crossStage.vk.vert.out
@@ -194,8 +194,9 @@
 
 Linked fragment stage:
 
-WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names.
-    blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}"
+WARNING: Linking unknown stage and fragment stages: Matched shader interfaces are using different instance names.
+    unknown stage stage: Block: crossStageBlock2 Instance: blockName1: ""
+    fragment stage: Block: crossStageBlock2 Instance: blockName2: ""
 
 Shader version: 460
 0:? Sequence
@@ -380,7 +381,7 @@
 0:?     'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 38
 
                               Capability Shader
@@ -469,7 +470,7 @@
                               Return
                               FunctionEnd
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 57
 
                               Capability Geometry
@@ -581,7 +582,7 @@
                               Return
                               FunctionEnd
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 81
 
                               Capability Shader
diff --git a/Test/baseResults/iomap.variableOutBlockIn.2.vert.out b/Test/baseResults/iomap.variableOutBlockIn.2.vert.out
new file mode 100644
index 0000000..3e6d30b
--- /dev/null
+++ b/Test/baseResults/iomap.variableOutBlockIn.2.vert.out
@@ -0,0 +1,276 @@
+iomap.variableOutBlockIn.2.vert
+Shader version: 440
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:8    Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:8        'a1' (layout( location=0) smooth out 4-component vector of float)
+0:8        Constant:
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:9      move second child to first child ( temp 2-component vector of float)
+0:9        'a2' (layout( location=1) smooth out 2-component vector of float)
+0:9        Constant:
+0:9          0.500000
+0:9          0.500000
+0:10      move second child to first child ( temp 4-component vector of float)
+0:10        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:10          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:10          Constant:
+0:10            0 (const uint)
+0:10        Constant:
+0:10          1.000000
+0:10          1.000000
+0:10          1.000000
+0:10          1.000000
+0:?   Linker Objects
+0:?     'a1' (layout( location=0) smooth out 4-component vector of float)
+0:?     'a2' (layout( location=1) smooth out 2-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+iomap.variableOutBlockIn.geom
+Shader version: 440
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+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 4-component vector of float)
+0:16        'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      move second child to first child ( temp 2-component vector of float)
+0:17        'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:17        Constant:
+0:17          0.500000
+0:17          0.500000
+0:18      move second child to first child ( temp 4-component vector of float)
+0:18        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
+0:18          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:18          Constant:
+0:18            0 (const uint)
+0:18        Constant:
+0:18          1.000000
+0:18          1.000000
+0:18          1.000000
+0:18          1.000000
+0:?   Linker Objects
+0:?     'gin' (layout( location=0) in 3-element array of block{ in 4-component vector of float a1,  in 2-component vector of float a2})
+0:?     'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:?     'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+
+
+Linked vertex stage:
+
+
+Linked geometry stage:
+
+
+Shader version: 440
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:8    Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:8        'a1' (layout( location=0) smooth out 4-component vector of float)
+0:8        Constant:
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:9      move second child to first child ( temp 2-component vector of float)
+0:9        'a2' (layout( location=1) smooth out 2-component vector of float)
+0:9        Constant:
+0:9          0.500000
+0:9          0.500000
+0:10      move second child to first child ( temp 4-component vector of float)
+0:10        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:10          'anon@0' ( 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})
+0:10          Constant:
+0:10            0 (const uint)
+0:10        Constant:
+0:10          1.000000
+0:10          1.000000
+0:10          1.000000
+0:10          1.000000
+0:?   Linker Objects
+0:?     'a1' (layout( location=0) smooth out 4-component vector of float)
+0:?     'a2' (layout( location=1) smooth out 2-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+Shader version: 440
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+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 4-component vector of float)
+0:16        'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      move second child to first child ( temp 2-component vector of float)
+0:17        'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:17        Constant:
+0:17          0.500000
+0:17          0.500000
+0:18      move second child to first child ( temp 4-component vector of float)
+0:18        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
+0:18          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+0:18          Constant:
+0:18            0 (const uint)
+0:18        Constant:
+0:18          1.000000
+0:18          1.000000
+0:18          1.000000
+0:18          1.000000
+0:?   Linker Objects
+0:?     'gin' (layout( location=0) in 3-element array of block{ in 4-component vector of float a1,  in 2-component vector of float a2})
+0:?     'a1' (layout( location=0 stream=0) out 4-component vector of float)
+0:?     'a2' (layout( location=1 stream=0) out 2-component vector of float)
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 29
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 9 14 22 27 28
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "a1"
+                              Name 14  "a2"
+                              Name 20  "gl_PerVertex"
+                              MemberName 20(gl_PerVertex) 0  "gl_Position"
+                              MemberName 20(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 20(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 22  ""
+                              Name 27  "gl_VertexID"
+                              Name 28  "gl_InstanceID"
+                              Decorate 9(a1) Location 0
+                              Decorate 14(a2) Location 1
+                              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
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+           9(a1):      8(ptr) Variable Output
+              10:    6(float) Constant 1065353216
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeVector 6(float) 2
+              13:             TypePointer Output 12(fvec2)
+          14(a2):     13(ptr) Variable Output
+              15:    6(float) Constant 1056964608
+              16:   12(fvec2) ConstantComposite 15 15
+              17:             TypeInt 32 0
+              18:     17(int) Constant 1
+              19:             TypeArray 6(float) 18
+20(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 19
+              21:             TypePointer Output 20(gl_PerVertex)
+              22:     21(ptr) Variable Output
+              23:             TypeInt 32 1
+              24:     23(int) Constant 0
+              26:             TypePointer Input 23(int)
+ 27(gl_VertexID):     26(ptr) Variable Input
+28(gl_InstanceID):     26(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(a1) 11
+                              Store 14(a2) 16
+              25:      8(ptr) AccessChain 22 24
+                              Store 25 11
+                              Return
+                              FunctionEnd
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 31
+
+                              Capability Geometry
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 9 14 22 30
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputTriangleStrip
+                              ExecutionMode 4 OutputVertices 3
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "a1"
+                              Name 14  "a2"
+                              Name 20  "gl_PerVertex"
+                              MemberName 20(gl_PerVertex) 0  "gl_Position"
+                              MemberName 20(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 20(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 22  ""
+                              Name 26  "Inputs"
+                              MemberName 26(Inputs) 0  "a1"
+                              MemberName 26(Inputs) 1  "a2"
+                              Name 30  "gin"
+                              Decorate 9(a1) Location 0
+                              Decorate 14(a2) Location 1
+                              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
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+           9(a1):      8(ptr) Variable Output
+              10:    6(float) Constant 1065353216
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeVector 6(float) 2
+              13:             TypePointer Output 12(fvec2)
+          14(a2):     13(ptr) Variable Output
+              15:    6(float) Constant 1056964608
+              16:   12(fvec2) ConstantComposite 15 15
+              17:             TypeInt 32 0
+              18:     17(int) Constant 1
+              19:             TypeArray 6(float) 18
+20(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 19
+              21:             TypePointer Output 20(gl_PerVertex)
+              22:     21(ptr) Variable Output
+              23:             TypeInt 32 1
+              24:     23(int) Constant 0
+      26(Inputs):             TypeStruct 7(fvec4) 12(fvec2)
+              27:     17(int) Constant 3
+              28:             TypeArray 26(Inputs) 27
+              29:             TypePointer Input 28
+         30(gin):     29(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(a1) 11
+                              Store 14(a2) 16
+              25:      8(ptr) AccessChain 22 24
+                              Store 25 11
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/iomap.variableOutBlockIn.vert.out b/Test/baseResults/iomap.variableOutBlockIn.vert.out
new file mode 100644
index 0000000..4b0ce64
--- /dev/null
+++ b/Test/baseResults/iomap.variableOutBlockIn.vert.out
@@ -0,0 +1,236 @@
+iomap.variableOutBlockIn.vert
+Shader version: 440
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:8    Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:8        'a1' (layout( location=0) smooth out 4-component vector of float)
+0:8        Constant:
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:9      move second child to first child ( temp 2-component vector of float)
+0:9        'a2' (layout( location=1) smooth out 2-component vector of float)
+0:9        Constant:
+0:9          0.500000
+0:9          0.500000
+0:10      move second child to first child ( temp 4-component vector of float)
+0:10        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:10          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:10          Constant:
+0:10            0 (const uint)
+0:10        Constant:
+0:10          1.000000
+0:10          1.000000
+0:10          1.000000
+0:10          1.000000
+0:?   Linker Objects
+0:?     'a1' (layout( location=0) smooth out 4-component vector of float)
+0:?     'a2' (layout( location=1) smooth out 2-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+iomap.variableOutBlockIn.frag
+Shader version: 440
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp 4-component vector of float)
+0:12        'color' (layout( location=0) out 4-component vector of float)
+0:12        Construct vec4 ( temp 4-component vector of float)
+0:12          vector swizzle ( temp 2-component vector of float)
+0:12            a1: direct index for structure ( in 4-component vector of float)
+0:12              'anon@0' (layout( location=0) in block{ in 4-component vector of float a1,  in 2-component vector of float a2})
+0:12              Constant:
+0:12                0 (const uint)
+0:12            Sequence
+0:12              Constant:
+0:12                0 (const int)
+0:12              Constant:
+0:12                1 (const int)
+0:12          a2: direct index for structure ( in 2-component vector of float)
+0:12            'anon@0' (layout( location=0) in block{ in 4-component vector of float a1,  in 2-component vector of float a2})
+0:12            Constant:
+0:12              1 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( location=0) in block{ in 4-component vector of float a1,  in 2-component vector of float a2})
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Linked fragment stage:
+
+
+Shader version: 440
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:8    Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:8        'a1' (layout( location=0) smooth out 4-component vector of float)
+0:8        Constant:
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:9      move second child to first child ( temp 2-component vector of float)
+0:9        'a2' (layout( location=1) smooth out 2-component vector of float)
+0:9        Constant:
+0:9          0.500000
+0:9          0.500000
+0:10      move second child to first child ( temp 4-component vector of float)
+0:10        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:10          'anon@0' ( 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})
+0:10          Constant:
+0:10            0 (const uint)
+0:10        Constant:
+0:10          1.000000
+0:10          1.000000
+0:10          1.000000
+0:10          1.000000
+0:?   Linker Objects
+0:?     'a1' (layout( location=0) smooth out 4-component vector of float)
+0:?     'a2' (layout( location=1) smooth out 2-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+Shader version: 440
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp 4-component vector of float)
+0:12        'color' (layout( location=0) out 4-component vector of float)
+0:12        Construct vec4 ( temp 4-component vector of float)
+0:12          vector swizzle ( temp 2-component vector of float)
+0:12            a1: direct index for structure ( in 4-component vector of float)
+0:12              'anon@0' (layout( location=0) in block{ in 4-component vector of float a1,  in 2-component vector of float a2})
+0:12              Constant:
+0:12                0 (const uint)
+0:12            Sequence
+0:12              Constant:
+0:12                0 (const int)
+0:12              Constant:
+0:12                1 (const int)
+0:12          a2: direct index for structure ( in 2-component vector of float)
+0:12            'anon@0' (layout( location=0) in block{ in 4-component vector of float a1,  in 2-component vector of float a2})
+0:12            Constant:
+0:12              1 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( location=0) in block{ in 4-component vector of float a1,  in 2-component vector of float a2})
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 29
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 9 14 22 27 28
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "a1"
+                              Name 14  "a2"
+                              Name 20  "gl_PerVertex"
+                              MemberName 20(gl_PerVertex) 0  "gl_Position"
+                              MemberName 20(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 20(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 22  ""
+                              Name 27  "gl_VertexID"
+                              Name 28  "gl_InstanceID"
+                              Decorate 9(a1) Location 0
+                              Decorate 14(a2) Location 1
+                              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
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+           9(a1):      8(ptr) Variable Output
+              10:    6(float) Constant 1065353216
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeVector 6(float) 2
+              13:             TypePointer Output 12(fvec2)
+          14(a2):     13(ptr) Variable Output
+              15:    6(float) Constant 1056964608
+              16:   12(fvec2) ConstantComposite 15 15
+              17:             TypeInt 32 0
+              18:     17(int) Constant 1
+              19:             TypeArray 6(float) 18
+20(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 19
+              21:             TypePointer Output 20(gl_PerVertex)
+              22:     21(ptr) Variable Output
+              23:             TypeInt 32 1
+              24:     23(int) Constant 0
+              26:             TypePointer Input 23(int)
+ 27(gl_VertexID):     26(ptr) Variable Input
+28(gl_InstanceID):     26(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(a1) 11
+                              Store 14(a2) 16
+              25:      8(ptr) AccessChain 22 24
+                              Store 25 11
+                              Return
+                              FunctionEnd
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 29
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 13
+                              ExecutionMode 4 OriginLowerLeft
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "color"
+                              Name 11  "Inputs"
+                              MemberName 11(Inputs) 0  "a1"
+                              MemberName 11(Inputs) 1  "a2"
+                              Name 13  ""
+                              Decorate 9(color) Location 0
+                              Decorate 11(Inputs) Block
+                              Decorate 13 Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(color):      8(ptr) Variable Output
+              10:             TypeVector 6(float) 2
+      11(Inputs):             TypeStruct 7(fvec4) 10(fvec2)
+              12:             TypePointer Input 11(Inputs)
+              13:     12(ptr) Variable Input
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:             TypePointer Input 7(fvec4)
+              20:     14(int) Constant 1
+              21:             TypePointer Input 10(fvec2)
+         4(main):           2 Function None 3
+               5:             Label
+              17:     16(ptr) AccessChain 13 15
+              18:    7(fvec4) Load 17
+              19:   10(fvec2) VectorShuffle 18 18 0 1
+              22:     21(ptr) AccessChain 13 20
+              23:   10(fvec2) Load 22
+              24:    6(float) CompositeExtract 19 0
+              25:    6(float) CompositeExtract 19 1
+              26:    6(float) CompositeExtract 23 0
+              27:    6(float) CompositeExtract 23 1
+              28:    7(fvec4) CompositeConstruct 24 25 26 27
+                              Store 9(color) 28
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out
index 404ae84..c34401c 100644
--- a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out
+++ b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out
@@ -92,15 +92,20 @@
 
 Linked vertex stage:
 
-ERROR: Linking vertex stage: Types must match:
-    anon@0: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus anon@1: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}"
-ERROR: Linking vertex stage: Types must match:
-    anon@2: " out block{ out 4-component vector of float v1}" versus " out block{ out 4-component vector of float v1,  out 4-component vector of float v2}"
-ERROR: Linking vertex stage: Types must match:
-    anon@1: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float b}" versus anon@3: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float a}"
-ERROR: Linking vertex stage: Matched Uniform or Storage blocks must all be anonymous, or all be named:
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    myName: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}" versus anon@4: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}"
+ERROR: Linking vertex and vertex stages: vertex block member has no corresponding member in vertex block:
+    vertex stage: Block: Block, Member: uWorld
+    vertex stage: Block: Block, Member: n/a 
+ERROR: Linking vertex and vertex stages: vertex block member has no corresponding member in vertex block:
+    vertex stage: Block: Vertex, Member: v2
+    vertex stage: Block: Vertex, Member: n/a 
+ERROR: Linking vertex and vertex stages: Member names and types must match:
+    Block: BufferBlock
+        vertex stage: " vec4 b"
+        vertex stage: " vec4 a"
+ERROR: Linking vertex and vertex stages: Matched Uniform or Storage blocks must all be anonymous, or all be named:
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: NamedBlock Instance: myName: ""
+    vertex stage: Block: NamedBlock Instance: anon@4: ""
 
 Shader version: 430
 ERROR: node is still EOpNull!
diff --git a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out
index ad609e8..d94debb 100644
--- a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out
+++ b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out
@@ -89,19 +89,35 @@
 
 Linked vertex stage:
 
-ERROR: Linking vertex stage: Types must match:
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    uC: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}"
-ERROR: Linking vertex stage: Types must match:
-ERROR: Linking vertex stage: Storage qualifiers must match:
-ERROR: Linking vertex stage: Layout qualification must match:
-    uBufC: "layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}"
-ERROR: Linking vertex stage: Types must match:
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    uD: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus uDefaultB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld}"
-ERROR: Linking vertex stage: Types must match:
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    oV: " out block{ out 4-component vector of float v1}" versus oVert: " out block{ out 4-component vector of float v2}"
+ERROR: Linking vertex and vertex stages: Member names and types must match:
+    Block: ColorBlock
+        vertex stage: " vec4 color1"
+        vertex stage: " vec4 color2"
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: ColorBlock Instance: uC: ""
+    vertex stage: Block: ColorBlock Instance: uColorB: ""
+ERROR: Linking vertex and vertex stages: Member names and types must match:
+    Block: ColorBlock
+        vertex stage: " vec4 color1"
+        vertex stage: " vec4 color2"
+ERROR: Linking vertex and vertex stages: Storage qualifiers must match:
+ERROR: Linking vertex and vertex stages: Layout packing qualifier must match:
+    vertex stage: Block: ColorBlock Instance: uBufC: "layout( column_major std430) buffer"
+    vertex stage: Block: ColorBlock Instance: uColorB: "layout( column_major std140) uniform"
+ERROR: Linking vertex and vertex stages: Member names and types must match:
+    Block: Block
+        vertex stage: " mat4x4 uProj"
+        vertex stage: " mat4x4 uWorld"
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: Block Instance: uD: ""
+    vertex stage: Block: Block Instance: uDefaultB: ""
+ERROR: Linking vertex and vertex stages: Member names and types must match:
+    Block: Vertex
+        vertex stage: " vec4 v1"
+        vertex stage: " vec4 v2"
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: Vertex Instance: oV: ""
+    vertex stage: Block: Vertex Instance: oVert: ""
 
 Shader version: 430
 0:? Sequence
diff --git a/Test/baseResults/link.multiBlocksValid.1.0.vert.out b/Test/baseResults/link.multiBlocksValid.1.0.vert.out
index 0015cab..69513f0 100644
--- a/Test/baseResults/link.multiBlocksValid.1.0.vert.out
+++ b/Test/baseResults/link.multiBlocksValid.1.0.vert.out
@@ -83,12 +83,15 @@
 
 Linked vertex stage:
 
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    c: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}" versus a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}"
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}" versus b: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}"
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    b: " out block{ out 4-component vector of float v1,  out 4-component vector of float v2}" versus c: " out block{ out 4-component vector of float v1,  out 4-component vector of float v2}"
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: ColorBlock Instance: c: ""
+    vertex stage: Block: ColorBlock Instance: a: ""
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: Block Instance: a: ""
+    vertex stage: Block: Block Instance: b: ""
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: Vertex Instance: b: ""
+    vertex stage: Block: Vertex Instance: c: ""
 
 Shader version: 430
 0:? Sequence
diff --git a/Test/baseResults/link.vk.differentPC.0.0.frag.out b/Test/baseResults/link.vk.differentPC.0.0.frag.out
index d7cfd22..d78ba54 100644
--- a/Test/baseResults/link.vk.differentPC.0.0.frag.out
+++ b/Test/baseResults/link.vk.differentPC.0.0.frag.out
@@ -52,8 +52,10 @@
 
 Linked fragment stage:
 
-ERROR: Linking fragment stage: Types must match:
-    uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2}"
+ERROR: Linking fragment and fragment stages: Member names and types must match:
+    Block: PushConstantBlock
+        fragment stage: " float scale"
+        fragment stage: " float scale2"
 
 Shader version: 450
 gl_FragCoord origin is upper left
diff --git a/Test/baseResults/link.vk.differentPC.1.0.frag.out b/Test/baseResults/link.vk.differentPC.1.0.frag.out
index 632f18b..07ed124 100644
--- a/Test/baseResults/link.vk.differentPC.1.0.frag.out
+++ b/Test/baseResults/link.vk.differentPC.1.0.frag.out
@@ -52,10 +52,12 @@
 
 Linked fragment stage:
 
-ERROR: Linking fragment stage: Types must match:
-    uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}"
-ERROR: Linking fragment stage: Types must match:
-    uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}"
+ERROR: Linking fragment and fragment stages: fragment block member has no corresponding member in fragment block:
+    fragment stage: Block: PushConstantBlock, Member: scale2
+    fragment stage: Block: PushConstantBlock, Member: n/a 
+ERROR: Linking fragment and fragment stages: fragment block member has no corresponding member in fragment block:
+    fragment stage: Block: PushConstantBlock, Member: scale2
+    fragment stage: Block: PushConstantBlock, Member: n/a 
 
 Shader version: 450
 gl_FragCoord origin is upper left
diff --git a/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out b/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out
index 3d76b2f..d3545bf 100755
--- a/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out
+++ b/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out
@@ -253,7 +253,7 @@
 0:?     'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in 1-element array of float ClipDistance gl_ClipDistance,  in 1-element array of float CullDistance gl_CullDistance,  in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/link.vk.matchingPC.0.0.frag.out b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
index c434b66..87d3b02 100644
--- a/Test/baseResults/link.vk.matchingPC.0.0.frag.out
+++ b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
@@ -90,7 +90,7 @@
 0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
index bdabab1..7f9a05a 100644
--- a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
+++ b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
@@ -87,14 +87,18 @@
 
 Linked vertex stage:
 
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    uC: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" versus uColor: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}"
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    uBuf: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" versus uBuffer: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}"
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    uM: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" versus uMatrix: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}"
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    oV: " out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2}" versus anon@0: " out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2}"
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: ColorBlock Instance: uC: ""
+    vertex stage: Block: ColorBlock Instance: uColor: ""
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: BufferBlock Instance: uBuf: ""
+    vertex stage: Block: BufferBlock Instance: uBuffer: ""
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: MatrixBlock Instance: uM: ""
+    vertex stage: Block: MatrixBlock Instance: uMatrix: ""
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: Vertex Instance: oV: ""
+    vertex stage: Block: Vertex Instance: anon@0: ""
 
 Shader version: 430
 0:? Sequence
@@ -173,7 +177,7 @@
 0:?     'P' ( in highp 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
index b0456a0..374a2a0 100644
--- a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
+++ b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
@@ -131,16 +131,21 @@
 
 Linked geometry stage:
 
-WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
-    uC: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" versus uColor: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}"
-WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
-    uBuf: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" versus uBuffer: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}"
-WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
-    uM: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" versus uMatrix: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}"
-WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
-    oV: "layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1}" versus anon@0: "layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1}"
-WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
-    iV: " in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2}" versus iVV: " in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2}"
+WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names.
+    geometry stage: Block: ColorBlock Instance: uC: ""
+    geometry stage: Block: ColorBlock Instance: uColor: ""
+WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names.
+    geometry stage: Block: BufferBlock Instance: uBuf: ""
+    geometry stage: Block: BufferBlock Instance: uBuffer: ""
+WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names.
+    geometry stage: Block: MatrixBlock Instance: uM: ""
+    geometry stage: Block: MatrixBlock Instance: uMatrix: ""
+WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names.
+    geometry stage: Block: Vertex Instance: oV: ""
+    geometry stage: Block: Vertex Instance: anon@0: ""
+WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names.
+    geometry stage: Block: Vertex Instance: iV: ""
+    geometry stage: Block: Vertex Instance: iVV: ""
 
 Shader version: 430
 invocations = 1
@@ -258,7 +263,7 @@
 0:?     'P' ( in 3-element array of highp 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 101
 
                               Capability Geometry
diff --git a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
index e1d5c88..410f192 100644
--- a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
+++ b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
@@ -56,8 +56,9 @@
 
 Linked vertex stage:
 
-WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
-    a: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2}" versus b: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2}"
+WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names.
+    vertex stage: Block: PCBlock Instance: a: ""
+    vertex stage: Block: PCBlock Instance: b: ""
 
 Shader version: 450
 0:? Sequence
@@ -108,7 +109,7 @@
 0:?     'P' (layout( location=0) in highp 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/link1.vk.frag.out b/Test/baseResults/link1.vk.frag.out
index fa1d48e..225aee1 100644
--- a/Test/baseResults/link1.vk.frag.out
+++ b/Test/baseResults/link1.vk.frag.out
@@ -197,7 +197,7 @@
 0:?     's2D' (layout( binding=1) uniform highp sampler2D)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/noMatchingFunction.frag.out b/Test/baseResults/noMatchingFunction.frag.out
new file mode 100644
index 0000000..85aa3f6
--- /dev/null
+++ b/Test/baseResults/noMatchingFunction.frag.out
@@ -0,0 +1,52 @@
+noMatchingFunction.frag
+ERROR: 0:17: 'func' : no matching overloaded function found 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 330
+ERROR: node is still EOpNull!
+0:8  Function Definition: func(struct-S-f11; ( global float)
+0:8    Function Parameters: 
+0:8      's' ( in structure{ global float a})
+0:10    Sequence
+0:10      Branch: Return with expression
+0:10        a: direct index for structure ( global float)
+0:10          's' ( in structure{ global float a})
+0:10          Constant:
+0:10            0 (const int)
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp float)
+0:17          'c' ( temp float)
+0:17          Constant:
+0:17            0.000000
+0:18      move second child to first child ( temp 4-component vector of float)
+0:18        'o_color' (layout( location=0) out 4-component vector of float)
+0:18        Construct vec4 ( temp 4-component vector of float)
+0:18          'c' ( temp float)
+0:?   Linker Objects
+0:?     'o_color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 330
+ERROR: node is still EOpNull!
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp float)
+0:17          'c' ( temp float)
+0:17          Constant:
+0:17            0.000000
+0:18      move second child to first child ( temp 4-component vector of float)
+0:18        'o_color' (layout( location=0) out 4-component vector of float)
+0:18        Construct vec4 ( temp 4-component vector of float)
+0:18          'c' ( temp float)
+0:?   Linker Objects
+0:?     'o_color' (layout( location=0) out 4-component vector of float)
+
diff --git a/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out b/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out
new file mode 100644
index 0000000..007dcb9
--- /dev/null
+++ b/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out
@@ -0,0 +1,51 @@
+rayQuery-OpConvertUToAccelerationStructureKHR.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 28
+
+                              Capability Shader
+                              Capability RayQueryKHR
+                              Extension  "SPV_KHR_ray_query"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              Name 4  "main"
+                              Name 8  "rayQuery"
+                              Name 11  "params"
+                              MemberName 11(params) 0  "tlas"
+                              Name 13  ""
+                              MemberDecorate 11(params) 0 Offset 0
+                              Decorate 11(params) Block
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeRayQueryKHR
+               7:             TypePointer Private 6
+     8(rayQuery):      7(ptr) Variable Private
+               9:             TypeInt 32 0
+              10:             TypeVector 9(int) 2
+      11(params):             TypeStruct 10(ivec2)
+              12:             TypePointer PushConstant 11(params)
+              13:     12(ptr) Variable PushConstant
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:             TypePointer PushConstant 10(ivec2)
+              19:             TypeAccelerationStructureKHR
+              21:      9(int) Constant 0
+              22:             TypeFloat 32
+              23:             TypeVector 22(float) 3
+              24:   22(float) Constant 0
+              25:   23(fvec3) ConstantComposite 24 24 24
+              26:   22(float) Constant 1065353216
+              27:   23(fvec3) ConstantComposite 26 26 26
+         4(main):           2 Function None 3
+               5:             Label
+              17:     16(ptr) AccessChain 13 15
+              18:   10(ivec2) Load 17
+              20:          19 ConvertUToAccelerationStructureKHR 18
+                              RayQueryInitializeKHR 8(rayQuery) 20 21 21 25 24 27 26
+                              RayQueryTerminateKHR 8(rayQuery)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out
index bf654f7..05936bb 100644
--- a/Test/baseResults/rayQuery-allOps.comp.out
+++ b/Test/baseResults/rayQuery-allOps.comp.out
@@ -1,6 +1,6 @@
 rayQuery-allOps.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 258
 
                               Capability Shader
diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out
index 90ebc4a..19a6171 100644
--- a/Test/baseResults/rayQuery-allOps.frag.out
+++ b/Test/baseResults/rayQuery-allOps.frag.out
@@ -1,6 +1,6 @@
 rayQuery-allOps.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 257
 
                               Capability Shader
diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out
index b3a93b0..67447b9 100644
--- a/Test/baseResults/rayQuery-allOps.rgen.out
+++ b/Test/baseResults/rayQuery-allOps.rgen.out
@@ -1,6 +1,6 @@
 rayQuery-allOps.rgen
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 257
 
                               Capability RayQueryKHR
diff --git a/Test/baseResults/rayQuery-global.rgen.out b/Test/baseResults/rayQuery-global.rgen.out
index 7b05173..968a178 100644
--- a/Test/baseResults/rayQuery-global.rgen.out
+++ b/Test/baseResults/rayQuery-global.rgen.out
@@ -1,6 +1,6 @@
 rayQuery-global.rgen
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 44
 
                               Capability RayQueryKHR
diff --git a/Test/baseResults/rayQuery-initialize.rgen.out b/Test/baseResults/rayQuery-initialize.rgen.out
index f16facd..dc213c5 100644
--- a/Test/baseResults/rayQuery-initialize.rgen.out
+++ b/Test/baseResults/rayQuery-initialize.rgen.out
@@ -1,6 +1,6 @@
 rayQuery-initialize.rgen
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 103
 
                               Capability RayQueryKHR
diff --git a/Test/baseResults/rayQuery-no-cse.rgen.out b/Test/baseResults/rayQuery-no-cse.rgen.out
index a44c41f..0a751a3 100644
--- a/Test/baseResults/rayQuery-no-cse.rgen.out
+++ b/Test/baseResults/rayQuery-no-cse.rgen.out
@@ -1,6 +1,6 @@
 rayQuery-no-cse.rgen
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 107
 
                               Capability RayQueryKHR
diff --git a/Test/baseResults/rayQuery-types.comp.out b/Test/baseResults/rayQuery-types.comp.out
index 87a1d68..bb7ed7b 100644
--- a/Test/baseResults/rayQuery-types.comp.out
+++ b/Test/baseResults/rayQuery-types.comp.out
@@ -1,6 +1,6 @@
 rayQuery-types.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 86
 
                               Capability Shader
diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out
index 06a1a5a..4a54973 100644
--- a/Test/baseResults/rayQuery.rgen.out
+++ b/Test/baseResults/rayQuery.rgen.out
@@ -1,6 +1,6 @@
 rayQuery.rgen
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 44
 
                               Capability RayQueryKHR
diff --git a/Test/baseResults/remap.basic.dcefunc.frag.out b/Test/baseResults/remap.basic.dcefunc.frag.out
index c531eba..f5c9a71 100644
--- a/Test/baseResults/remap.basic.dcefunc.frag.out
+++ b/Test/baseResults/remap.basic.dcefunc.frag.out
@@ -1,6 +1,6 @@
 remap.basic.dcefunc.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.everything.frag.out b/Test/baseResults/remap.basic.everything.frag.out
index d483f20..6c73e59 100644
--- a/Test/baseResults/remap.basic.everything.frag.out
+++ b/Test/baseResults/remap.basic.everything.frag.out
@@ -1,6 +1,6 @@
 remap.basic.everything.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24969
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.none.frag.out b/Test/baseResults/remap.basic.none.frag.out
index 34f64c8..3cff65b 100644
--- a/Test/baseResults/remap.basic.none.frag.out
+++ b/Test/baseResults/remap.basic.none.frag.out
@@ -1,6 +1,6 @@
 remap.basic.none.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.strip.frag.out b/Test/baseResults/remap.basic.strip.frag.out
index f1d7769..030877d 100644
--- a/Test/baseResults/remap.basic.strip.frag.out
+++ b/Test/baseResults/remap.basic.strip.frag.out
@@ -1,6 +1,6 @@
 remap.basic.strip.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index 88c516f..b1ce523 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24878
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index 465b024..13ac4f2 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index 4fb9218..d861a43 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
index f1e3535..22acbad 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
@@ -1,6 +1,6 @@
 remap.hlsl.templatetypes.everything.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24954
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
index 226f2c6..7e653a1 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
@@ -1,6 +1,6 @@
 remap.hlsl.templatetypes.none.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 160
 
                               Capability Shader
diff --git a/Test/baseResults/remap.if.everything.frag.out b/Test/baseResults/remap.if.everything.frag.out
index 3a521be..e7e7369 100644
--- a/Test/baseResults/remap.if.everything.frag.out
+++ b/Test/baseResults/remap.if.everything.frag.out
@@ -1,6 +1,6 @@
 remap.if.everything.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22855
 
                               Capability Shader
diff --git a/Test/baseResults/remap.if.none.frag.out b/Test/baseResults/remap.if.none.frag.out
index cb2d31b..d239492 100644
--- a/Test/baseResults/remap.if.none.frag.out
+++ b/Test/baseResults/remap.if.none.frag.out
@@ -1,6 +1,6 @@
 remap.if.none.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1a.everything.frag.out b/Test/baseResults/remap.similar_1a.everything.frag.out
index 993dc1c..6de9cb9 100644
--- a/Test/baseResults/remap.similar_1a.everything.frag.out
+++ b/Test/baseResults/remap.similar_1a.everything.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1a.everything.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24916
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1a.none.frag.out b/Test/baseResults/remap.similar_1a.none.frag.out
index e46b8e1..6823448 100644
--- a/Test/baseResults/remap.similar_1a.none.frag.out
+++ b/Test/baseResults/remap.similar_1a.none.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1a.none.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 86
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1b.everything.frag.out b/Test/baseResults/remap.similar_1b.everything.frag.out
index ffe5446..86e5ac7 100644
--- a/Test/baseResults/remap.similar_1b.everything.frag.out
+++ b/Test/baseResults/remap.similar_1b.everything.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1b.everything.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24916
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1b.none.frag.out b/Test/baseResults/remap.similar_1b.none.frag.out
index 5f5241c..2433820 100644
--- a/Test/baseResults/remap.similar_1b.none.frag.out
+++ b/Test/baseResults/remap.similar_1b.none.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1b.none.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 91
 
                               Capability Shader
diff --git a/Test/baseResults/remap.specconst.comp.out b/Test/baseResults/remap.specconst.comp.out
index 2bed3cf..905d85b 100644
--- a/Test/baseResults/remap.specconst.comp.out
+++ b/Test/baseResults/remap.specconst.comp.out
@@ -1,6 +1,6 @@
 remap.specconst.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 16104
 
                               Capability Shader
diff --git a/Test/baseResults/remap.switch.everything.frag.out b/Test/baseResults/remap.switch.everything.frag.out
index 443fe68..d257093 100644
--- a/Test/baseResults/remap.switch.everything.frag.out
+++ b/Test/baseResults/remap.switch.everything.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 23990
 
                               Capability Shader
diff --git a/Test/baseResults/remap.switch.none.frag.out b/Test/baseResults/remap.switch.none.frag.out
index 3347dce..53d2739 100644
--- a/Test/baseResults/remap.switch.none.frag.out
+++ b/Test/baseResults/remap.switch.none.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/remap.uniformarray.everything.frag.out b/Test/baseResults/remap.uniformarray.everything.frag.out
index ee1daa7..902b597 100644
--- a/Test/baseResults/remap.uniformarray.everything.frag.out
+++ b/Test/baseResults/remap.uniformarray.everything.frag.out
@@ -1,6 +1,6 @@
 remap.uniformarray.everything.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 25030
 
                               Capability Shader
diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out
index 00e1f57..cc4fc7d 100644
--- a/Test/baseResults/remap.uniformarray.none.frag.out
+++ b/Test/baseResults/remap.uniformarray.none.frag.out
@@ -1,6 +1,6 @@
 remap.uniformarray.none.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
index d512639..858a0db 100644
--- a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
+++ b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
@@ -1,6 +1,6 @@
 spv.1.3.8bitstorage-ssbo.vert
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
index 1dce1ea..e7ec5ed 100644
--- a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
+++ b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
@@ -1,6 +1,6 @@
 spv.1.3.8bitstorage-ubo.vert
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.3.coopmat.comp.out b/Test/baseResults/spv.1.3.coopmat.comp.out
index d7a9d5e..6b15772 100644
--- a/Test/baseResults/spv.1.3.coopmat.comp.out
+++ b/Test/baseResults/spv.1.3.coopmat.comp.out
@@ -1,6 +1,6 @@
 spv.1.3.coopmat.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.LoopControl.frag.out b/Test/baseResults/spv.1.4.LoopControl.frag.out
index 0ffffd6..c3330fc 100644
--- a/Test/baseResults/spv.1.4.LoopControl.frag.out
+++ b/Test/baseResults/spv.1.4.LoopControl.frag.out
@@ -3,7 +3,7 @@
 WARNING: 0:15: 'max_iterations' : expected a single integer argument 
 
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.NonWritable.frag.out b/Test/baseResults/spv.1.4.NonWritable.frag.out
index da3b52c..d2b76b8 100644
--- a/Test/baseResults/spv.1.4.NonWritable.frag.out
+++ b/Test/baseResults/spv.1.4.NonWritable.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.NonWritable.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.comp.out b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
index 018fd0a..ad0397b 100644
--- a/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
+++ b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
@@ -1,6 +1,6 @@
 spv.1.4.OpCopyLogical.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
index a2458ba..850ee91 100644
--- a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
+++ b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.OpCopyLogical.funcall.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 59
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
index 7dcda62..7b52595 100644
--- a/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
+++ b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
@@ -1,6 +1,6 @@
 spv.1.4.OpCopyLogicalBool.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 135
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
index e43e954..f37b0fd 100644
--- a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
+++ b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.OpEntryPoint.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out
index 835ab13..dff799f 100644
--- a/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out
+++ b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out
@@ -1,6 +1,6 @@
 spv.1.4.OpEntryPoint.opaqueParams.vert
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpSelect.frag.out b/Test/baseResults/spv.1.4.OpSelect.frag.out
index b3a5b4d..42f2ca7 100644
--- a/Test/baseResults/spv.1.4.OpSelect.frag.out
+++ b/Test/baseResults/spv.1.4.OpSelect.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.OpSelect.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.constructComposite.comp.out b/Test/baseResults/spv.1.4.constructComposite.comp.out
index cbec381..e896cf8 100644
--- a/Test/baseResults/spv.1.4.constructComposite.comp.out
+++ b/Test/baseResults/spv.1.4.constructComposite.comp.out
@@ -1,6 +1,6 @@
 spv.1.4.constructComposite.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.funcall.array.frag.out b/Test/baseResults/spv.1.4.funcall.array.frag.out
index d976bb1..6a23f2a 100644
--- a/Test/baseResults/spv.1.4.funcall.array.frag.out
+++ b/Test/baseResults/spv.1.4.funcall.array.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.funcall.array.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.image.frag.out b/Test/baseResults/spv.1.4.image.frag.out
index fadde97..059ed19 100644
--- a/Test/baseResults/spv.1.4.image.frag.out
+++ b/Test/baseResults/spv.1.4.image.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.image.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 104
 
                               Capability Shader
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 9f698db..fea83ab 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
@@ -1,7 +1,7 @@
 spv.1.4.load.bool.array.interface.block.frag
 Validation failed
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.sparseTexture.frag.out b/Test/baseResults/spv.1.4.sparseTexture.frag.out
index 965f4c8..a26ae66 100644
--- a/Test/baseResults/spv.1.4.sparseTexture.frag.out
+++ b/Test/baseResults/spv.1.4.sparseTexture.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.sparseTexture.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 213
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.texture.frag.out b/Test/baseResults/spv.1.4.texture.frag.out
index ac9f72f..6d28e1f 100644
--- a/Test/baseResults/spv.1.4.texture.frag.out
+++ b/Test/baseResults/spv.1.4.texture.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.texture.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 79
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.6.conditionalDiscard.frag.out b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out
new file mode 100644
index 0000000..6364773
--- /dev/null
+++ b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out
@@ -0,0 +1,60 @@
+spv.1.6.conditionalDiscard.frag
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 36
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 13 17 34
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 400
+                              Name 4  "main"
+                              Name 9  "v"
+                              Name 13  "tex"
+                              Name 17  "coord"
+                              Name 34  "gl_FragColor"
+                              Decorate 13(tex) DescriptorSet 0
+                              Decorate 13(tex) Binding 0
+                              Decorate 17(coord) Location 0
+                              Decorate 34(gl_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:             TypeSampledImage 10
+              12:             TypePointer UniformConstant 11
+         13(tex):     12(ptr) Variable UniformConstant
+              15:             TypeVector 6(float) 2
+              16:             TypePointer Input 15(fvec2)
+       17(coord):     16(ptr) Variable Input
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1045220557
+              23:    6(float) Constant 1050253722
+              24:    6(float) Constant 1053609165
+              25:    7(fvec4) ConstantComposite 21 22 23 24
+              26:             TypeBool
+              27:             TypeVector 26(bool) 4
+              33:             TypePointer Output 7(fvec4)
+34(gl_FragColor):     33(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+            9(v):      8(ptr) Variable Function
+              14:          11 Load 13(tex)
+              18:   15(fvec2) Load 17(coord)
+              19:    7(fvec4) ImageSampleImplicitLod 14 18
+                              Store 9(v) 19
+              20:    7(fvec4) Load 9(v)
+              28:   27(bvec4) FOrdEqual 20 25
+              29:    26(bool) All 28
+                              SelectionMerge 31 None
+                              BranchConditional 29 30 31
+              30:               Label
+                                TerminateInvocation
+              31:             Label
+              35:    7(fvec4) Load 9(v)
+                              Store 34(gl_FragColor) 35
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.6.helperInvocation.frag.out b/Test/baseResults/spv.1.6.helperInvocation.frag.out
new file mode 100644
index 0000000..30a5c6a
--- /dev/null
+++ b/Test/baseResults/spv.1.6.helperInvocation.frag.out
@@ -0,0 +1,41 @@
+spv.1.6.helperInvocation.frag
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 20
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 15
+                              ExecutionMode 4 OriginUpperLeft
+                              Source ESSL 310
+                              Name 4  "main"
+                              Name 8  "gl_HelperInvocation"
+                              Name 15  "outp"
+                              Decorate 8(gl_HelperInvocation) BuiltIn HelperInvocation
+                              Decorate 8(gl_HelperInvocation) Volatile
+                              Decorate 15(outp) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeBool
+               7:             TypePointer Input 6(bool)
+8(gl_HelperInvocation):      7(ptr) Variable Input
+              12:             TypeFloat 32
+              13:             TypeVector 12(float) 4
+              14:             TypePointer Output 13(fvec4)
+        15(outp):     14(ptr) Variable Output
+              17:   12(float) Constant 1065353216
+         4(main):           2 Function None 3
+               5:             Label
+               9:     6(bool) Load 8(gl_HelperInvocation)
+                              SelectionMerge 11 None
+                              BranchConditional 9 10 11
+              10:               Label
+              16:   13(fvec4)   Load 15(outp)
+              18:   13(fvec4)   CompositeConstruct 17 17 17 17
+              19:   13(fvec4)   FAdd 16 18
+                                Store 15(outp) 19
+                                Branch 11
+              11:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.6.samplerBuffer.frag.out b/Test/baseResults/spv.1.6.samplerBuffer.frag.out
new file mode 100644
index 0000000..1bd52da
--- /dev/null
+++ b/Test/baseResults/spv.1.6.samplerBuffer.frag.out
@@ -0,0 +1,43 @@
+spv.1.6.samplerBuffer.frag
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 23
+
+                              Capability Shader
+                              Capability SampledBuffer
+                              Capability ImageQuery
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 13
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 140
+                              Name 4  "main"
+                              Name 9  "o"
+                              Name 13  "sampB"
+                              Decorate 9(o) Location 0
+                              Decorate 13(sampB) DescriptorSet 0
+                              Decorate 13(sampB) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+            9(o):      8(ptr) Variable Output
+              10:             TypeInt 32 1
+              11:             TypeImage 10(int) Buffer sampled format:Unknown
+              12:             TypePointer UniformConstant 11
+       13(sampB):     12(ptr) Variable UniformConstant
+              17:    6(float) Constant 1120403456
+              19:             TypeInt 32 0
+              20:     19(int) Constant 3
+              21:             TypePointer Output 6(float)
+         4(main):           2 Function None 3
+               5:             Label
+              14:          11 Load 13(sampB)
+              15:     10(int) ImageQuerySize 14
+              16:    6(float) ConvertSToF 15
+              18:    6(float) FDiv 16 17
+              22:     21(ptr) AccessChain 9(o) 20
+                              Store 22 18
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.6.separate.frag.out b/Test/baseResults/spv.1.6.separate.frag.out
new file mode 100644
index 0000000..f485fad
--- /dev/null
+++ b/Test/baseResults/spv.1.6.separate.frag.out
@@ -0,0 +1,52 @@
+spv.1.6.separate.frag
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 27
+
+                              Capability Shader
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 13 18 24
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 400
+                              Name 4  "main"
+                              Name 9  "texBuffer"
+                              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 13(s) Binding 0
+                              Decorate 18(itexBuffer) DescriptorSet 0
+                              Decorate 18(itexBuffer) Binding 2
+                              Decorate 24(utexBuffer) DescriptorSet 0
+                              Decorate 24(utexBuffer) Binding 3
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) Buffer sampled format:Unknown
+               8:             TypePointer UniformConstant 7
+    9(texBuffer):      8(ptr) Variable UniformConstant
+              11:             TypeSampler
+              12:             TypePointer UniformConstant 11
+           13(s):     12(ptr) Variable UniformConstant
+              15:             TypeInt 32 1
+              16:             TypeImage 15(int) Buffer sampled format:Unknown
+              17:             TypePointer UniformConstant 16
+  18(itexBuffer):     17(ptr) Variable UniformConstant
+              21:             TypeInt 32 0
+              22:             TypeImage 21(int) Buffer sampled format:Unknown
+              23:             TypePointer UniformConstant 22
+  24(utexBuffer):     23(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+              10:           7 Load 9(texBuffer)
+              14:          11 Load 13(s)
+              19:          16 Load 18(itexBuffer)
+              20:          11 Load 13(s)
+              25:          22 Load 24(utexBuffer)
+              26:          11 Load 13(s)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.6.specConstant.comp.out b/Test/baseResults/spv.1.6.specConstant.comp.out
new file mode 100644
index 0000000..2c32fbd
--- /dev/null
+++ b/Test/baseResults/spv.1.6.specConstant.comp.out
@@ -0,0 +1,69 @@
+spv.1.6.specConstant.comp
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 39
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 18
+                              ExecutionModeId 4 LocalSizeId 7 8 9
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 14  "foo(vu3;"
+                              Name 13  "wgs"
+                              Name 16  "bn"
+                              MemberName 16(bn) 0  "a"
+                              Name 18  "bi"
+                              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
+                              Decorate 18(bi) Binding 0
+                              Decorate 25 SpecId 18
+                              Decorate 26 SpecId 19
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:      6(int) SpecConstant 32
+               8:      6(int) Constant 32
+               9:      6(int) SpecConstant 1
+              10:             TypeVector 6(int) 3
+              11:             TypePointer Function 10(ivec3)
+              12:             TypeFunction 2 11(ptr)
+          16(bn):             TypeStruct 6(int)
+              17:             TypePointer StorageBuffer 16(bn)
+          18(bi):     17(ptr) Variable StorageBuffer
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:      6(int) Constant 0
+              22:             TypePointer Function 6(int)
+              25:      6(int) SpecConstant 32
+              26:      6(int) SpecConstant 1
+              27:   10(ivec3) SpecConstantComposite 25 8 26
+              28:      6(int) Constant 1
+              31:      6(int) Constant 2
+              35:             TypePointer StorageBuffer 6(int)
+         4(main):           2 Function None 3
+               5:             Label
+       37(param):     11(ptr) Variable Function
+                              Store 37(param) 27
+              38:           2 FunctionCall 14(foo(vu3;) 37(param)
+                              Return
+                              FunctionEnd
+    14(foo(vu3;):           2 Function None 12
+         13(wgs):     11(ptr) FunctionParameter
+              15:             Label
+              23:     22(ptr) AccessChain 13(wgs) 21
+              24:      6(int) Load 23
+              29:      6(int) CompositeExtract 27 1
+              30:      6(int) IMul 24 29
+              32:     22(ptr) AccessChain 13(wgs) 31
+              33:      6(int) Load 32
+              34:      6(int) IMul 30 33
+              36:     35(ptr) AccessChain 18(bi) 20
+                              Store 36 34
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
index 42c9995..8c28d91 100644
--- a/Test/baseResults/spv.100ops.frag.out
+++ b/Test/baseResults/spv.100ops.frag.out
@@ -1,6 +1,6 @@
 spv.100ops.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index 29c7d85..84fa9a3 100644
--- a/Test/baseResults/spv.130.frag.out
+++ b/Test/baseResults/spv.130.frag.out
@@ -3,7 +3,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 205
 
                               Capability Shader
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index a517882..a4401a2 100644
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -1,7 +1,7 @@
 spv.140.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
index 0ad3337..b6e22e1 100644
--- a/Test/baseResults/spv.150.geom.out
+++ b/Test/baseResults/spv.150.geom.out
@@ -1,6 +1,6 @@
 spv.150.geom
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 71
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
index 2b09f4b..167a15e 100644
--- a/Test/baseResults/spv.150.vert.out
+++ b/Test/baseResults/spv.150.vert.out
@@ -1,6 +1,6 @@
 spv.150.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out
index a91b4e4..d14519b 100644
--- a/Test/baseResults/spv.16bitstorage-int.frag.out
+++ b/Test/baseResults/spv.16bitstorage-int.frag.out
@@ -1,6 +1,6 @@
 spv.16bitstorage-int.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 171
 
                               Capability Shader
diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out
index f90d0c1..ea935ce 100644
--- a/Test/baseResults/spv.16bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.16bitstorage-uint.frag.out
@@ -1,6 +1,6 @@
 spv.16bitstorage-uint.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 173
 
                               Capability Shader
diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out
index 2d934f4..c19f607 100644
--- a/Test/baseResults/spv.16bitstorage.frag.out
+++ b/Test/baseResults/spv.16bitstorage.frag.out
@@ -1,6 +1,6 @@
 spv.16bitstorage.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 173
 
                               Capability Shader
diff --git a/Test/baseResults/spv.16bitxfb.vert.out b/Test/baseResults/spv.16bitxfb.vert.out
index f4d66ef..2dd93d4 100644
--- a/Test/baseResults/spv.16bitxfb.vert.out
+++ b/Test/baseResults/spv.16bitxfb.vert.out
@@ -1,6 +1,6 @@
 spv.16bitxfb.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 59
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
index 2201788..10f115b 100644
--- a/Test/baseResults/spv.300BuiltIns.vert.out
+++ b/Test/baseResults/spv.300BuiltIns.vert.out
@@ -1,6 +1,6 @@
 spv.300BuiltIns.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
index 3b691e2..156a6e2 100644
--- a/Test/baseResults/spv.300layout.frag.out
+++ b/Test/baseResults/spv.300layout.frag.out
@@ -1,6 +1,6 @@
 spv.300layout.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out
index 3db50b0..6345aa1 100644
--- a/Test/baseResults/spv.300layout.vert.out
+++ b/Test/baseResults/spv.300layout.vert.out
@@ -1,6 +1,6 @@
 spv.300layout.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 163
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
index 315605d..d986fb5 100644
--- a/Test/baseResults/spv.300layoutp.vert.out
+++ b/Test/baseResults/spv.300layoutp.vert.out
@@ -1,6 +1,6 @@
 spv.300layoutp.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out
index f4322ab..fa354be 100644
--- a/Test/baseResults/spv.310.bitcast.frag.out
+++ b/Test/baseResults/spv.310.bitcast.frag.out
@@ -1,6 +1,6 @@
 spv.310.bitcast.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 179
 
                               Capability Shader
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
index 931d038..459c689 100644
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -1,6 +1,6 @@
 spv.310.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
index a4d8413..197fe60 100644
--- a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
+++ b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
@@ -1,6 +1,6 @@
 spv.320.meshShaderUserDefined.mesh
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 143
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
index 1166508..f9e69e5 100644
--- a/Test/baseResults/spv.330.geom.out
+++ b/Test/baseResults/spv.330.geom.out
@@ -1,6 +1,6 @@
 spv.330.geom
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 32
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.400.frag.nanclamp.out b/Test/baseResults/spv.400.frag.nanclamp.out
index cf1ffb0..f03e938 100644
--- a/Test/baseResults/spv.400.frag.nanclamp.out
+++ b/Test/baseResults/spv.400.frag.nanclamp.out
@@ -1,6 +1,6 @@
 spv.400.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 1122
 
                               Capability Shader
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index 6786885..aa42d28 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -1,7 +1,7 @@
 spv.400.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 1122
 
                               Capability Shader
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
index a07c9b1..b6f0ddf 100644
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -1,6 +1,6 @@
 spv.400.tesc
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 92
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index 58f4b97..0b8abf6 100644
--- a/Test/baseResults/spv.400.tese.out
+++ b/Test/baseResults/spv.400.tese.out
@@ -1,6 +1,6 @@
 spv.400.tese
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 96
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index 17f2749..d814d1a 100644
--- a/Test/baseResults/spv.420.geom.out
+++ b/Test/baseResults/spv.420.geom.out
@@ -1,6 +1,6 @@
 spv.420.geom
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 72
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
index 15da382..bc00fa1 100644
--- a/Test/baseResults/spv.430.frag.out
+++ b/Test/baseResults/spv.430.frag.out
@@ -1,6 +1,6 @@
 spv.430.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
index a6b2e34..eada8d0 100644
--- a/Test/baseResults/spv.430.vert.out
+++ b/Test/baseResults/spv.430.vert.out
@@ -1,7 +1,7 @@
 spv.430.vert
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.450.geom.out b/Test/baseResults/spv.450.geom.out
index 3e7ac45..5398b3c 100644
--- a/Test/baseResults/spv.450.geom.out
+++ b/Test/baseResults/spv.450.geom.out
@@ -1,6 +1,6 @@
 spv.450.geom
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 31
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.450.noRedecl.tesc.out b/Test/baseResults/spv.450.noRedecl.tesc.out
index 0925119..dcf0a9f 100644
--- a/Test/baseResults/spv.450.noRedecl.tesc.out
+++ b/Test/baseResults/spv.450.noRedecl.tesc.out
@@ -1,6 +1,6 @@
 spv.450.noRedecl.tesc
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 21
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
index c18ab3f..eabb9e7 100644
--- a/Test/baseResults/spv.450.tesc.out
+++ b/Test/baseResults/spv.450.tesc.out
@@ -1,7 +1,7 @@
 spv.450.tesc
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 45
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.460.comp.out b/Test/baseResults/spv.460.comp.out
index d53efde..c6abaca 100644
--- a/Test/baseResults/spv.460.comp.out
+++ b/Test/baseResults/spv.460.comp.out
@@ -1,6 +1,6 @@
 spv.460.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.460.frag.out b/Test/baseResults/spv.460.frag.out
index a8bec34..4201fbb 100644
--- a/Test/baseResults/spv.460.frag.out
+++ b/Test/baseResults/spv.460.frag.out
@@ -1,6 +1,6 @@
 spv.460.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.460.subgroupEXT.mesh.out b/Test/baseResults/spv.460.subgroupEXT.mesh.out
new file mode 100644
index 0000000..be234ae
--- /dev/null
+++ b/Test/baseResults/spv.460.subgroupEXT.mesh.out
@@ -0,0 +1,448 @@
+spv.460.subgroupEXT.mesh
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 280
+
+                              Capability ClipDistance
+                              Capability CullDistance
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+                              Capability GroupNonUniformArithmetic
+                              Capability GroupNonUniformBallot
+                              Capability GroupNonUniformShuffle
+                              Capability GroupNonUniformShuffleRelative
+                              Capability GroupNonUniformClustered
+                              Capability GroupNonUniformQuad
+                              Capability FragmentShadingRateKHR
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+                              Extension  "SPV_KHR_fragment_shading_rate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 35 41 57 109 148 162 163 168 169 172 173 174 175 176
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              SourceExtension  "GL_KHR_shader_subgroup_arithmetic"
+                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_clustered"
+                              SourceExtension  "GL_KHR_shader_subgroup_quad"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle_relative"
+                              SourceExtension  "GL_KHR_shader_subgroup_vote"
+                              Name 4  "main"
+                              Name 6  "basic_works("
+                              Name 13  "ballot_works(vf4;"
+                              Name 12  "f4"
+                              Name 16  "vote_works(vf4;"
+                              Name 15  "f4"
+                              Name 19  "shuffle_works(vf4;"
+                              Name 18  "f4"
+                              Name 22  "arith_works(vf4;"
+                              Name 21  "f4"
+                              Name 25  "clustered_works(vf4;"
+                              Name 24  "f4"
+                              Name 28  "quad_works(vf4;"
+                              Name 27  "f4"
+                              Name 32  "iid"
+                              Name 35  "gl_LocalInvocationID"
+                              Name 40  "gid"
+                              Name 41  "gl_WorkGroupID"
+                              Name 44  "vertexCount"
+                              Name 46  "primitiveCount"
+                              Name 54  "gl_MeshPerVertexEXT"
+                              MemberName 54(gl_MeshPerVertexEXT) 0  "gl_Position"
+                              MemberName 54(gl_MeshPerVertexEXT) 1  "gl_PointSize"
+                              MemberName 54(gl_MeshPerVertexEXT) 2  "gl_ClipDistance"
+                              MemberName 54(gl_MeshPerVertexEXT) 3  "gl_CullDistance"
+                              Name 57  "gl_MeshVerticesEXT"
+                              Name 106  "gl_MeshPerPrimitiveEXT"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 0  "gl_PrimitiveID"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 1  "gl_Layer"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 2  "gl_ViewportIndex"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 3  "gl_CullPrimitiveEXT"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 4  "gl_PrimitiveShadingRateEXT"
+                              Name 109  "gl_MeshPrimitivesEXT"
+                              Name 148  "gl_PrimitiveTriangleIndicesEXT"
+                              Name 162  "gl_SubgroupSize"
+                              Name 163  "gl_SubgroupInvocationID"
+                              Name 168  "gl_NumSubgroups"
+                              Name 169  "gl_SubgroupID"
+                              Name 172  "gl_SubgroupEqMask"
+                              Name 173  "gl_SubgroupGeMask"
+                              Name 174  "gl_SubgroupGtMask"
+                              Name 175  "gl_SubgroupLeMask"
+                              Name 176  "gl_SubgroupLtMask"
+                              Name 182  "ballot"
+                              Name 219  "ballot"
+                              Name 254  "ballot"
+                              Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId
+                              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
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR
+                              Decorate 106(gl_MeshPerPrimitiveEXT) Block
+                              Decorate 148(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
+                              Decorate 162(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 162(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 163(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 163(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 168(gl_NumSubgroups) BuiltIn NumSubgroups
+                              Decorate 169(gl_SubgroupID) BuiltIn SubgroupId
+                              Decorate 172(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
+                              Decorate 173(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
+                              Decorate 174(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
+                              Decorate 175(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
+                              Decorate 176(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
+                              Decorate 279 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+              10:             TypePointer Function 9(fvec4)
+              11:             TypeFunction 2 10(ptr)
+              30:             TypeInt 32 0
+              31:             TypePointer Function 30(int)
+              33:             TypeVector 30(int) 3
+              34:             TypePointer Input 33(ivec3)
+35(gl_LocalInvocationID):     34(ptr) Variable Input
+              36:     30(int) Constant 0
+              37:             TypePointer Input 30(int)
+41(gl_WorkGroupID):     34(ptr) Variable Input
+              45:     30(int) Constant 81
+              47:     30(int) Constant 32
+              50:     30(int) Constant 4
+              51:             TypeArray 8(float) 50
+              52:     30(int) Constant 3
+              53:             TypeArray 8(float) 52
+54(gl_MeshPerVertexEXT):             TypeStruct 9(fvec4) 8(float) 51 53
+              55:             TypeArray 54(gl_MeshPerVertexEXT) 45
+              56:             TypePointer Output 55
+57(gl_MeshVerticesEXT):     56(ptr) Variable Output
+              59:             TypeInt 32 1
+              60:     59(int) Constant 0
+              61:    8(float) Constant 1065353216
+              62:    9(fvec4) ConstantComposite 61 61 61 61
+              63:             TypePointer Output 9(fvec4)
+              66:     59(int) Constant 1
+              67:    8(float) Constant 1073741824
+              68:             TypePointer Output 8(float)
+              71:     59(int) Constant 2
+              72:     59(int) Constant 3
+              73:    8(float) Constant 1077936128
+              76:    8(float) Constant 1082130432
+              78:     30(int) Constant 1
+              79:     30(int) Constant 264
+              80:     30(int) Constant 2
+             105:             TypeBool
+106(gl_MeshPerPrimitiveEXT):             TypeStruct 59(int) 59(int) 59(int) 105(bool) 59(int)
+             107:             TypeArray 106(gl_MeshPerPrimitiveEXT) 47
+             108:             TypePointer Output 107
+109(gl_MeshPrimitivesEXT):    108(ptr) Variable Output
+             111:     59(int) Constant 6
+             112:             TypePointer Output 59(int)
+             115:     59(int) Constant 7
+             118:     59(int) Constant 8
+             121:   105(bool) ConstantFalse
+             122:             TypePointer Output 105(bool)
+             145:     30(int) Constant 96
+             146:             TypeArray 33(ivec3) 145
+             147:             TypePointer Output 146
+148(gl_PrimitiveTriangleIndicesEXT):    147(ptr) Variable Output
+             149:   33(ivec3) ConstantComposite 78 78 78
+             150:             TypePointer Output 33(ivec3)
+             154:   33(ivec3) ConstantComposite 80 80 80
+162(gl_SubgroupSize):     37(ptr) Variable Input
+163(gl_SubgroupInvocationID):     37(ptr) Variable Input
+             164:     30(int) Constant 3400
+             165:     30(int) Constant 72
+             166:     30(int) Constant 2056
+168(gl_NumSubgroups):     37(ptr) Variable Input
+169(gl_SubgroupID):     37(ptr) Variable Input
+             170:             TypeVector 30(int) 4
+             171:             TypePointer Input 170(ivec4)
+172(gl_SubgroupEqMask):    171(ptr) Variable Input
+173(gl_SubgroupGeMask):    171(ptr) Variable Input
+174(gl_SubgroupGtMask):    171(ptr) Variable Input
+175(gl_SubgroupLeMask):    171(ptr) Variable Input
+176(gl_SubgroupLtMask):    171(ptr) Variable Input
+             181:             TypePointer Function 170(ivec4)
+             184:  170(ivec4) ConstantComposite 78 78 78 78
+             198:   105(bool) ConstantTrue
+             255:     30(int) Constant 85
+             256:  170(ivec4) ConstantComposite 255 36 36 36
+             279:   33(ivec3) ConstantComposite 47 78 78
+         4(main):           2 Function None 3
+               5:             Label
+         32(iid):     31(ptr) Variable Function
+         40(gid):     31(ptr) Variable Function
+ 44(vertexCount):     31(ptr) Variable Function
+46(primitiveCount):     31(ptr) Variable Function
+              38:     37(ptr) AccessChain 35(gl_LocalInvocationID) 36
+              39:     30(int) Load 38
+                              Store 32(iid) 39
+              42:     37(ptr) AccessChain 41(gl_WorkGroupID) 36
+              43:     30(int) Load 42
+                              Store 40(gid) 43
+                              Store 44(vertexCount) 45
+                              Store 46(primitiveCount) 47
+              48:     30(int) Load 44(vertexCount)
+              49:     30(int) Load 46(primitiveCount)
+                              SetMeshOutputsEXT 48 49
+              58:     30(int) Load 32(iid)
+              64:     63(ptr) AccessChain 57(gl_MeshVerticesEXT) 58 60
+                              Store 64 62
+              65:     30(int) Load 32(iid)
+              69:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 65 66
+                              Store 69 67
+              70:     30(int) Load 32(iid)
+              74:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 70 71 72
+                              Store 74 73
+              75:     30(int) Load 32(iid)
+              77:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 75 72 71
+                              Store 77 76
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+              81:     30(int) Load 32(iid)
+              82:     30(int) IAdd 81 78
+              83:     30(int) Load 32(iid)
+              84:     63(ptr) AccessChain 57(gl_MeshVerticesEXT) 83 60
+              85:    9(fvec4) Load 84
+              86:     63(ptr) AccessChain 57(gl_MeshVerticesEXT) 82 60
+                              Store 86 85
+              87:     30(int) Load 32(iid)
+              88:     30(int) IAdd 87 78
+              89:     30(int) Load 32(iid)
+              90:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 89 66
+              91:    8(float) Load 90
+              92:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 88 66
+                              Store 92 91
+              93:     30(int) Load 32(iid)
+              94:     30(int) IAdd 93 78
+              95:     30(int) Load 32(iid)
+              96:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 95 71 72
+              97:    8(float) Load 96
+              98:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 94 71 72
+                              Store 98 97
+              99:     30(int) Load 32(iid)
+             100:     30(int) IAdd 99 78
+             101:     30(int) Load 32(iid)
+             102:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 101 72 71
+             103:    8(float) Load 102
+             104:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 100 72 71
+                              Store 104 103
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+             110:     30(int) Load 32(iid)
+             113:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 110 60
+                              Store 113 111
+             114:     30(int) Load 32(iid)
+             116:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 114 66
+                              Store 116 115
+             117:     30(int) Load 32(iid)
+             119:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 117 71
+                              Store 119 118
+             120:     30(int) Load 32(iid)
+             123:    122(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 120 72
+                              Store 123 121
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+             124:     30(int) Load 32(iid)
+             125:     30(int) IAdd 124 78
+             126:     30(int) Load 32(iid)
+             127:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 126 60
+             128:     59(int) Load 127
+             129:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 125 60
+                              Store 129 128
+             130:     30(int) Load 32(iid)
+             131:     30(int) IAdd 130 78
+             132:     30(int) Load 32(iid)
+             133:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 132 66
+             134:     59(int) Load 133
+             135:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 131 66
+                              Store 135 134
+             136:     30(int) Load 32(iid)
+             137:     30(int) IAdd 136 78
+             138:     30(int) Load 32(iid)
+             139:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 138 71
+             140:     59(int) Load 139
+             141:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 137 71
+                              Store 141 140
+             142:     30(int) Load 32(iid)
+             143:     30(int) IAdd 142 78
+             144:    122(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 143 72
+                              Store 144 121
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+             151:    150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 60
+                              Store 151 149
+             152:     30(int) Load 46(primitiveCount)
+             153:     30(int) ISub 152 78
+             155:    150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 153
+                              Store 155 154
+             156:     30(int) Load 40(gid)
+             157:     30(int) Load 40(gid)
+             158:     30(int) ISub 157 78
+             159:    150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 158
+             160:   33(ivec3) Load 159
+             161:    150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 156
+                              Store 161 160
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+                              Return
+                              FunctionEnd
+ 6(basic_works():           2 Function None 3
+               7:             Label
+                              ControlBarrier 52 52 164
+                              MemoryBarrier 52 164
+                              MemoryBarrier 52 165
+                              MemoryBarrier 52 166
+             167:   105(bool) GroupNonUniformElect 52
+                              MemoryBarrier 52 79
+                              Return
+                              FunctionEnd
+13(ballot_works(vf4;):           2 Function None 11
+          12(f4):     10(ptr) FunctionParameter
+              14:             Label
+     182(ballot):    181(ptr) Variable Function
+             177:    9(fvec4) Load 12(f4)
+             178:    9(fvec4) GroupNonUniformBroadcast 52 177 36
+             179:    9(fvec4) Load 12(f4)
+             180:    9(fvec4) GroupNonUniformBroadcastFirst 52 179
+             183:  170(ivec4) GroupNonUniformBallot 52 121
+                              Store 182(ballot) 183
+             185:   105(bool) GroupNonUniformInverseBallot 52 184
+             186:  170(ivec4) Load 182(ballot)
+             187:   105(bool) GroupNonUniformBallotBitExtract 52 186 36
+             188:  170(ivec4) Load 182(ballot)
+             189:     30(int) GroupNonUniformBallotBitCount 52 Reduce 188
+             190:  170(ivec4) Load 182(ballot)
+             191:     30(int) GroupNonUniformBallotBitCount 52 InclusiveScan 190
+             192:  170(ivec4) Load 182(ballot)
+             193:     30(int) GroupNonUniformBallotBitCount 52 ExclusiveScan 192
+             194:  170(ivec4) Load 182(ballot)
+             195:     30(int) GroupNonUniformBallotFindLSB 52 194
+             196:  170(ivec4) Load 182(ballot)
+             197:     30(int) GroupNonUniformBallotFindMSB 52 196
+                              Return
+                              FunctionEnd
+16(vote_works(vf4;):           2 Function None 11
+          15(f4):     10(ptr) FunctionParameter
+              17:             Label
+             199:   105(bool) GroupNonUniformAll 52 198
+             200:   105(bool) GroupNonUniformAny 52 121
+             201:    9(fvec4) Load 15(f4)
+             202:   105(bool) GroupNonUniformAllEqual 52 201
+                              Return
+                              FunctionEnd
+19(shuffle_works(vf4;):           2 Function None 11
+          18(f4):     10(ptr) FunctionParameter
+              20:             Label
+             203:    9(fvec4) Load 18(f4)
+             204:    9(fvec4) GroupNonUniformShuffle 52 203 36
+             205:    9(fvec4) Load 18(f4)
+             206:    9(fvec4) GroupNonUniformShuffleXor 52 205 78
+             207:    9(fvec4) Load 18(f4)
+             208:    9(fvec4) GroupNonUniformShuffleUp 52 207 78
+             209:    9(fvec4) Load 18(f4)
+             210:    9(fvec4) GroupNonUniformShuffleDown 52 209 78
+                              Return
+                              FunctionEnd
+22(arith_works(vf4;):           2 Function None 11
+          21(f4):     10(ptr) FunctionParameter
+              23:             Label
+     219(ballot):    181(ptr) Variable Function
+             211:    9(fvec4) Load 21(f4)
+             212:    9(fvec4) GroupNonUniformFAdd 52 Reduce 211
+             213:    9(fvec4) Load 21(f4)
+             214:    9(fvec4) GroupNonUniformFMul 52 Reduce 213
+             215:    9(fvec4) Load 21(f4)
+             216:    9(fvec4) GroupNonUniformFMin 52 Reduce 215
+             217:    9(fvec4) Load 21(f4)
+             218:    9(fvec4) GroupNonUniformFMax 52 Reduce 217
+             220:  170(ivec4) Load 219(ballot)
+             221:  170(ivec4) GroupNonUniformBitwiseAnd 52 Reduce 220
+             222:  170(ivec4) Load 219(ballot)
+             223:  170(ivec4) GroupNonUniformBitwiseOr 52 Reduce 222
+             224:  170(ivec4) Load 219(ballot)
+             225:  170(ivec4) GroupNonUniformBitwiseXor 52 Reduce 224
+             226:    9(fvec4) Load 21(f4)
+             227:    9(fvec4) GroupNonUniformFAdd 52 InclusiveScan 226
+             228:    9(fvec4) Load 21(f4)
+             229:    9(fvec4) GroupNonUniformFMul 52 InclusiveScan 228
+             230:    9(fvec4) Load 21(f4)
+             231:    9(fvec4) GroupNonUniformFMin 52 InclusiveScan 230
+             232:    9(fvec4) Load 21(f4)
+             233:    9(fvec4) GroupNonUniformFMax 52 InclusiveScan 232
+             234:  170(ivec4) Load 219(ballot)
+             235:  170(ivec4) GroupNonUniformBitwiseAnd 52 InclusiveScan 234
+             236:  170(ivec4) Load 219(ballot)
+             237:  170(ivec4) GroupNonUniformBitwiseOr 52 InclusiveScan 236
+             238:  170(ivec4) Load 219(ballot)
+             239:  170(ivec4) GroupNonUniformBitwiseXor 52 InclusiveScan 238
+             240:    9(fvec4) Load 21(f4)
+             241:    9(fvec4) GroupNonUniformFAdd 52 ExclusiveScan 240
+             242:    9(fvec4) Load 21(f4)
+             243:    9(fvec4) GroupNonUniformFMul 52 ExclusiveScan 242
+             244:    9(fvec4) Load 21(f4)
+             245:    9(fvec4) GroupNonUniformFMin 52 ExclusiveScan 244
+             246:    9(fvec4) Load 21(f4)
+             247:    9(fvec4) GroupNonUniformFMax 52 ExclusiveScan 246
+             248:  170(ivec4) Load 219(ballot)
+             249:  170(ivec4) GroupNonUniformBitwiseAnd 52 ExclusiveScan 248
+             250:  170(ivec4) Load 219(ballot)
+             251:  170(ivec4) GroupNonUniformBitwiseOr 52 ExclusiveScan 250
+             252:  170(ivec4) Load 219(ballot)
+             253:  170(ivec4) GroupNonUniformBitwiseXor 52 ExclusiveScan 252
+                              Return
+                              FunctionEnd
+25(clustered_works(vf4;):           2 Function None 11
+          24(f4):     10(ptr) FunctionParameter
+              26:             Label
+     254(ballot):    181(ptr) Variable Function
+                              Store 254(ballot) 256
+             257:    9(fvec4) Load 24(f4)
+             258:    9(fvec4) GroupNonUniformFAdd 52 ClusteredReduce 257 80
+             259:    9(fvec4) Load 24(f4)
+             260:    9(fvec4) GroupNonUniformFMul 52 ClusteredReduce 259 80
+             261:    9(fvec4) Load 24(f4)
+             262:    9(fvec4) GroupNonUniformFMin 52 ClusteredReduce 261 80
+             263:    9(fvec4) Load 24(f4)
+             264:    9(fvec4) GroupNonUniformFMax 52 ClusteredReduce 263 80
+             265:  170(ivec4) Load 254(ballot)
+             266:  170(ivec4) GroupNonUniformBitwiseAnd 52 ClusteredReduce 265 80
+             267:  170(ivec4) Load 254(ballot)
+             268:  170(ivec4) GroupNonUniformBitwiseOr 52 ClusteredReduce 267 80
+             269:  170(ivec4) Load 254(ballot)
+             270:  170(ivec4) GroupNonUniformBitwiseXor 52 ClusteredReduce 269 80
+                              Return
+                              FunctionEnd
+28(quad_works(vf4;):           2 Function None 11
+          27(f4):     10(ptr) FunctionParameter
+              29:             Label
+             271:    9(fvec4) Load 27(f4)
+             272:    9(fvec4) GroupNonUniformQuadBroadcast 52 271 36
+             273:    9(fvec4) Load 27(f4)
+             274:    9(fvec4) GroupNonUniformQuadSwap 52 273 36
+             275:    9(fvec4) Load 27(f4)
+             276:    9(fvec4) GroupNonUniformQuadSwap 52 275 78
+             277:    9(fvec4) Load 27(f4)
+             278:    9(fvec4) GroupNonUniformQuadSwap 52 277 80
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.460.subgroupEXT.task.out b/Test/baseResults/spv.460.subgroupEXT.task.out
new file mode 100644
index 0000000..efe30b7
--- /dev/null
+++ b/Test/baseResults/spv.460.subgroupEXT.task.out
@@ -0,0 +1,375 @@
+spv.460.subgroupEXT.task
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 243
+
+                              Capability StorageImageWriteWithoutFormat
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+                              Capability GroupNonUniformArithmetic
+                              Capability GroupNonUniformBallot
+                              Capability GroupNonUniformShuffle
+                              Capability GroupNonUniformShuffleRelative
+                              Capability GroupNonUniformClustered
+                              Capability GroupNonUniformQuad
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TaskEXT 4  "main" 35 41 56 61 77 102 123 124 129 130 133 134 135 136 137
+                              ExecutionMode 4 LocalSize 32 1 1
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              SourceExtension  "GL_KHR_shader_subgroup_arithmetic"
+                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_clustered"
+                              SourceExtension  "GL_KHR_shader_subgroup_quad"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle_relative"
+                              SourceExtension  "GL_KHR_shader_subgroup_vote"
+                              Name 4  "main"
+                              Name 6  "basic_works("
+                              Name 13  "ballot_works(vf4;"
+                              Name 12  "f4"
+                              Name 16  "vote_works(vf4;"
+                              Name 15  "f4"
+                              Name 19  "shuffle_works(vf4;"
+                              Name 18  "f4"
+                              Name 22  "arith_works(vf4;"
+                              Name 21  "f4"
+                              Name 25  "clustered_works(vf4;"
+                              Name 24  "f4"
+                              Name 28  "quad_works(vf4;"
+                              Name 27  "f4"
+                              Name 32  "iid"
+                              Name 35  "gl_LocalInvocationID"
+                              Name 40  "gid"
+                              Name 41  "gl_WorkGroupID"
+                              Name 44  "i"
+                              Name 56  "mem"
+                              Name 59  "block0"
+                              MemberName 59(block0) 0  "uni_value"
+                              Name 61  ""
+                              Name 77  "uni_image"
+                              Name 100  "Task"
+                              MemberName 100(Task) 0  "dummy"
+                              MemberName 100(Task) 1  "submesh"
+                              Name 102  "mytask"
+                              Name 123  "gl_SubgroupSize"
+                              Name 124  "gl_SubgroupInvocationID"
+                              Name 129  "gl_NumSubgroups"
+                              Name 130  "gl_SubgroupID"
+                              Name 133  "gl_SubgroupEqMask"
+                              Name 134  "gl_SubgroupGeMask"
+                              Name 135  "gl_SubgroupGtMask"
+                              Name 136  "gl_SubgroupLeMask"
+                              Name 137  "gl_SubgroupLtMask"
+                              Name 143  "ballot"
+                              Name 181  "ballot"
+                              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
+                              Decorate 61 Binding 1
+                              Decorate 77(uni_image) DescriptorSet 0
+                              Decorate 77(uni_image) Binding 0
+                              Decorate 77(uni_image) NonReadable
+                              Decorate 123(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 123(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 124(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 124(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 129(gl_NumSubgroups) BuiltIn NumSubgroups
+                              Decorate 130(gl_SubgroupID) BuiltIn SubgroupId
+                              Decorate 133(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
+                              Decorate 134(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
+                              Decorate 135(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
+                              Decorate 136(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
+                              Decorate 137(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
+                              Decorate 242 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+              10:             TypePointer Function 9(fvec4)
+              11:             TypeFunction 2 10(ptr)
+              30:             TypeInt 32 0
+              31:             TypePointer Function 30(int)
+              33:             TypeVector 30(int) 3
+              34:             TypePointer Input 33(ivec3)
+35(gl_LocalInvocationID):     34(ptr) Variable Input
+              36:     30(int) Constant 0
+              37:             TypePointer Input 30(int)
+41(gl_WorkGroupID):     34(ptr) Variable Input
+              51:     30(int) Constant 10
+              52:             TypeBool
+              54:             TypeArray 9(fvec4) 51
+              55:             TypePointer Workgroup 54
+         56(mem):     55(ptr) Variable Workgroup
+      59(block0):             TypeStruct 30(int)
+              60:             TypePointer Uniform 59(block0)
+              61:     60(ptr) Variable Uniform
+              62:             TypeInt 32 1
+              63:     62(int) Constant 0
+              64:             TypePointer Uniform 30(int)
+              70:             TypePointer Workgroup 9(fvec4)
+              73:     62(int) Constant 1
+              75:             TypeImage 8(float) 2D nonsampled format:Unknown
+              76:             TypePointer UniformConstant 75
+   77(uni_image):     76(ptr) Variable UniformConstant
+              81:             TypeVector 62(int) 2
+              91:     30(int) Constant 1
+              95:     30(int) Constant 264
+              96:     30(int) Constant 2
+              97:             TypeVector 8(float) 2
+              98:     30(int) Constant 3
+              99:             TypeArray 97(fvec2) 98
+       100(Task):             TypeStruct 97(fvec2) 99
+             101:             TypePointer TaskPayloadWorkgroupEXT 100(Task)
+     102(mytask):    101(ptr) Variable TaskPayloadWorkgroupEXT
+             103:    8(float) Constant 1106247680
+             104:    8(float) Constant 1106771968
+             105:   97(fvec2) ConstantComposite 103 104
+             106:             TypePointer TaskPayloadWorkgroupEXT 97(fvec2)
+             108:    8(float) Constant 1107296256
+             109:    8(float) Constant 1107558400
+             110:   97(fvec2) ConstantComposite 108 109
+             112:    8(float) Constant 1107820544
+             113:    8(float) Constant 1108082688
+             114:   97(fvec2) ConstantComposite 112 113
+             116:     62(int) Constant 2
+123(gl_SubgroupSize):     37(ptr) Variable Input
+124(gl_SubgroupInvocationID):     37(ptr) Variable Input
+             125:     30(int) Constant 3400
+             126:     30(int) Constant 72
+             127:     30(int) Constant 2056
+129(gl_NumSubgroups):     37(ptr) Variable Input
+130(gl_SubgroupID):     37(ptr) Variable Input
+             131:             TypeVector 30(int) 4
+             132:             TypePointer Input 131(ivec4)
+133(gl_SubgroupEqMask):    132(ptr) Variable Input
+134(gl_SubgroupGeMask):    132(ptr) Variable Input
+135(gl_SubgroupGtMask):    132(ptr) Variable Input
+136(gl_SubgroupLeMask):    132(ptr) Variable Input
+137(gl_SubgroupLtMask):    132(ptr) Variable Input
+             142:             TypePointer Function 131(ivec4)
+             144:    52(bool) ConstantFalse
+             146:  131(ivec4) ConstantComposite 91 91 91 91
+             160:    52(bool) ConstantTrue
+             217:     30(int) Constant 85
+             218:  131(ivec4) ConstantComposite 217 36 36 36
+             241:     30(int) Constant 32
+             242:   33(ivec3) ConstantComposite 241 91 91
+         4(main):           2 Function None 3
+               5:             Label
+         32(iid):     31(ptr) Variable Function
+         40(gid):     31(ptr) Variable Function
+           44(i):     31(ptr) Variable Function
+              38:     37(ptr) AccessChain 35(gl_LocalInvocationID) 36
+              39:     30(int) Load 38
+                              Store 32(iid) 39
+              42:     37(ptr) AccessChain 41(gl_WorkGroupID) 36
+              43:     30(int) Load 42
+                              Store 40(gid) 43
+                              Store 44(i) 36
+                              Branch 45
+              45:             Label
+                              LoopMerge 47 48 None
+                              Branch 49
+              49:             Label
+              50:     30(int) Load 44(i)
+              53:    52(bool) ULessThan 50 51
+                              BranchConditional 53 46 47
+              46:               Label
+              57:     30(int)   Load 44(i)
+              58:     30(int)   Load 44(i)
+              65:     64(ptr)   AccessChain 61 63
+              66:     30(int)   Load 65
+              67:     30(int)   IAdd 58 66
+              68:    8(float)   ConvertUToF 67
+              69:    9(fvec4)   CompositeConstruct 68 68 68 68
+              71:     70(ptr)   AccessChain 56(mem) 57
+                                Store 71 69
+                                Branch 48
+              48:               Label
+              72:     30(int)   Load 44(i)
+              74:     30(int)   IAdd 72 73
+                                Store 44(i) 74
+                                Branch 45
+              47:             Label
+              78:          75 Load 77(uni_image)
+              79:     30(int) Load 32(iid)
+              80:     62(int) Bitcast 79
+              82:   81(ivec2) CompositeConstruct 80 80
+              83:     30(int) Load 40(gid)
+              84:     70(ptr) AccessChain 56(mem) 83
+              85:    9(fvec4) Load 84
+                              ImageWrite 78 82 85
+              86:          75 Load 77(uni_image)
+              87:     30(int) Load 32(iid)
+              88:     62(int) Bitcast 87
+              89:   81(ivec2) CompositeConstruct 88 88
+              90:     30(int) Load 40(gid)
+              92:     30(int) IAdd 90 91
+              93:     70(ptr) AccessChain 56(mem) 92
+              94:    9(fvec4) Load 93
+                              ImageWrite 86 89 94
+                              MemoryBarrier 91 95
+                              ControlBarrier 96 96 95
+             107:    106(ptr) AccessChain 102(mytask) 63
+                              Store 107 105
+             111:    106(ptr) AccessChain 102(mytask) 73 63
+                              Store 111 110
+             115:    106(ptr) AccessChain 102(mytask) 73 73
+                              Store 115 114
+             117:     30(int) Load 40(gid)
+             118:     30(int) UMod 117 96
+             119:    106(ptr) AccessChain 102(mytask) 73 118
+             120:   97(fvec2) Load 119
+             121:    106(ptr) AccessChain 102(mytask) 73 116
+                              Store 121 120
+                              MemoryBarrier 91 95
+                              ControlBarrier 96 96 95
+                              EmitMeshTasksEXT 98 91 91 102(mytask)
+                              FunctionEnd
+ 6(basic_works():           2 Function None 3
+               7:             Label
+                              ControlBarrier 98 98 125
+                              MemoryBarrier 98 125
+                              MemoryBarrier 98 126
+                              MemoryBarrier 98 127
+             128:    52(bool) GroupNonUniformElect 98
+                              MemoryBarrier 98 95
+                              Return
+                              FunctionEnd
+13(ballot_works(vf4;):           2 Function None 11
+          12(f4):     10(ptr) FunctionParameter
+              14:             Label
+     143(ballot):    142(ptr) Variable Function
+             138:    9(fvec4) Load 12(f4)
+             139:    9(fvec4) GroupNonUniformBroadcast 98 138 36
+             140:    9(fvec4) Load 12(f4)
+             141:    9(fvec4) GroupNonUniformBroadcastFirst 98 140
+             145:  131(ivec4) GroupNonUniformBallot 98 144
+                              Store 143(ballot) 145
+             147:    52(bool) GroupNonUniformInverseBallot 98 146
+             148:  131(ivec4) Load 143(ballot)
+             149:    52(bool) GroupNonUniformBallotBitExtract 98 148 36
+             150:  131(ivec4) Load 143(ballot)
+             151:     30(int) GroupNonUniformBallotBitCount 98 Reduce 150
+             152:  131(ivec4) Load 143(ballot)
+             153:     30(int) GroupNonUniformBallotBitCount 98 InclusiveScan 152
+             154:  131(ivec4) Load 143(ballot)
+             155:     30(int) GroupNonUniformBallotBitCount 98 ExclusiveScan 154
+             156:  131(ivec4) Load 143(ballot)
+             157:     30(int) GroupNonUniformBallotFindLSB 98 156
+             158:  131(ivec4) Load 143(ballot)
+             159:     30(int) GroupNonUniformBallotFindMSB 98 158
+                              Return
+                              FunctionEnd
+16(vote_works(vf4;):           2 Function None 11
+          15(f4):     10(ptr) FunctionParameter
+              17:             Label
+             161:    52(bool) GroupNonUniformAll 98 160
+             162:    52(bool) GroupNonUniformAny 98 144
+             163:    9(fvec4) Load 15(f4)
+             164:    52(bool) GroupNonUniformAllEqual 98 163
+                              Return
+                              FunctionEnd
+19(shuffle_works(vf4;):           2 Function None 11
+          18(f4):     10(ptr) FunctionParameter
+              20:             Label
+             165:    9(fvec4) Load 18(f4)
+             166:    9(fvec4) GroupNonUniformShuffle 98 165 36
+             167:    9(fvec4) Load 18(f4)
+             168:    9(fvec4) GroupNonUniformShuffleXor 98 167 91
+             169:    9(fvec4) Load 18(f4)
+             170:    9(fvec4) GroupNonUniformShuffleUp 98 169 91
+             171:    9(fvec4) Load 18(f4)
+             172:    9(fvec4) GroupNonUniformShuffleDown 98 171 91
+                              Return
+                              FunctionEnd
+22(arith_works(vf4;):           2 Function None 11
+          21(f4):     10(ptr) FunctionParameter
+              23:             Label
+     181(ballot):    142(ptr) Variable Function
+             173:    9(fvec4) Load 21(f4)
+             174:    9(fvec4) GroupNonUniformFAdd 98 Reduce 173
+             175:    9(fvec4) Load 21(f4)
+             176:    9(fvec4) GroupNonUniformFMul 98 Reduce 175
+             177:    9(fvec4) Load 21(f4)
+             178:    9(fvec4) GroupNonUniformFMin 98 Reduce 177
+             179:    9(fvec4) Load 21(f4)
+             180:    9(fvec4) GroupNonUniformFMax 98 Reduce 179
+             182:  131(ivec4) Load 181(ballot)
+             183:  131(ivec4) GroupNonUniformBitwiseAnd 98 Reduce 182
+             184:  131(ivec4) Load 181(ballot)
+             185:  131(ivec4) GroupNonUniformBitwiseOr 98 Reduce 184
+             186:  131(ivec4) Load 181(ballot)
+             187:  131(ivec4) GroupNonUniformBitwiseXor 98 Reduce 186
+             188:    9(fvec4) Load 21(f4)
+             189:    9(fvec4) GroupNonUniformFAdd 98 InclusiveScan 188
+             190:    9(fvec4) Load 21(f4)
+             191:    9(fvec4) GroupNonUniformFMul 98 InclusiveScan 190
+             192:    9(fvec4) Load 21(f4)
+             193:    9(fvec4) GroupNonUniformFMin 98 InclusiveScan 192
+             194:    9(fvec4) Load 21(f4)
+             195:    9(fvec4) GroupNonUniformFMax 98 InclusiveScan 194
+             196:  131(ivec4) Load 181(ballot)
+             197:  131(ivec4) GroupNonUniformBitwiseAnd 98 InclusiveScan 196
+             198:  131(ivec4) Load 181(ballot)
+             199:  131(ivec4) GroupNonUniformBitwiseOr 98 InclusiveScan 198
+             200:  131(ivec4) Load 181(ballot)
+             201:  131(ivec4) GroupNonUniformBitwiseXor 98 InclusiveScan 200
+             202:    9(fvec4) Load 21(f4)
+             203:    9(fvec4) GroupNonUniformFAdd 98 ExclusiveScan 202
+             204:    9(fvec4) Load 21(f4)
+             205:    9(fvec4) GroupNonUniformFMul 98 ExclusiveScan 204
+             206:    9(fvec4) Load 21(f4)
+             207:    9(fvec4) GroupNonUniformFMin 98 ExclusiveScan 206
+             208:    9(fvec4) Load 21(f4)
+             209:    9(fvec4) GroupNonUniformFMax 98 ExclusiveScan 208
+             210:  131(ivec4) Load 181(ballot)
+             211:  131(ivec4) GroupNonUniformBitwiseAnd 98 ExclusiveScan 210
+             212:  131(ivec4) Load 181(ballot)
+             213:  131(ivec4) GroupNonUniformBitwiseOr 98 ExclusiveScan 212
+             214:  131(ivec4) Load 181(ballot)
+             215:  131(ivec4) GroupNonUniformBitwiseXor 98 ExclusiveScan 214
+                              Return
+                              FunctionEnd
+25(clustered_works(vf4;):           2 Function None 11
+          24(f4):     10(ptr) FunctionParameter
+              26:             Label
+     216(ballot):    142(ptr) Variable Function
+                              Store 216(ballot) 218
+             219:    9(fvec4) Load 24(f4)
+             220:    9(fvec4) GroupNonUniformFAdd 98 ClusteredReduce 219 96
+             221:    9(fvec4) Load 24(f4)
+             222:    9(fvec4) GroupNonUniformFMul 98 ClusteredReduce 221 96
+             223:    9(fvec4) Load 24(f4)
+             224:    9(fvec4) GroupNonUniformFMin 98 ClusteredReduce 223 96
+             225:    9(fvec4) Load 24(f4)
+             226:    9(fvec4) GroupNonUniformFMax 98 ClusteredReduce 225 96
+             227:  131(ivec4) Load 216(ballot)
+             228:  131(ivec4) GroupNonUniformBitwiseAnd 98 ClusteredReduce 227 96
+             229:  131(ivec4) Load 216(ballot)
+             230:  131(ivec4) GroupNonUniformBitwiseOr 98 ClusteredReduce 229 96
+             231:  131(ivec4) Load 216(ballot)
+             232:  131(ivec4) GroupNonUniformBitwiseXor 98 ClusteredReduce 231 96
+                              Return
+                              FunctionEnd
+28(quad_works(vf4;):           2 Function None 11
+          27(f4):     10(ptr) FunctionParameter
+              29:             Label
+             233:    9(fvec4) Load 27(f4)
+             234:    9(fvec4) GroupNonUniformQuadBroadcast 98 233 36
+             235:    9(fvec4) Load 27(f4)
+             236:    9(fvec4) GroupNonUniformQuadSwap 98 235 36
+             237:    9(fvec4) Load 27(f4)
+             238:    9(fvec4) GroupNonUniformQuadSwap 98 237 91
+             239:    9(fvec4) Load 27(f4)
+             240:    9(fvec4) GroupNonUniformQuadSwap 98 239 96
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.460.vert.out b/Test/baseResults/spv.460.vert.out
index e15f364..eb75ab8 100644
--- a/Test/baseResults/spv.460.vert.out
+++ b/Test/baseResults/spv.460.vert.out
@@ -1,6 +1,6 @@
 spv.460.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bit-16bit-construction.frag.out b/Test/baseResults/spv.8bit-16bit-construction.frag.out
index 4eb9021..9a85a6a 100644
--- a/Test/baseResults/spv.8bit-16bit-construction.frag.out
+++ b/Test/baseResults/spv.8bit-16bit-construction.frag.out
@@ -1,7 +1,7 @@
 spv.8bit-16bit-construction.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out
index 00ef309..830b3e3 100644
--- a/Test/baseResults/spv.8bitstorage-int.frag.out
+++ b/Test/baseResults/spv.8bitstorage-int.frag.out
@@ -1,6 +1,6 @@
 spv.8bitstorage-int.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 171
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.8bitstorage-ssbo.vert.out
index 863eb68..e8e9ca3 100644
--- a/Test/baseResults/spv.8bitstorage-ssbo.vert.out
+++ b/Test/baseResults/spv.8bitstorage-ssbo.vert.out
@@ -1,6 +1,6 @@
 spv.8bitstorage-ssbo.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bitstorage-ubo.vert.out b/Test/baseResults/spv.8bitstorage-ubo.vert.out
index c64945f..f41f63e 100644
--- a/Test/baseResults/spv.8bitstorage-ubo.vert.out
+++ b/Test/baseResults/spv.8bitstorage-ubo.vert.out
@@ -1,6 +1,6 @@
 spv.8bitstorage-ubo.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bitstorage-uint.frag.out b/Test/baseResults/spv.8bitstorage-uint.frag.out
index 5809991..f372baf 100644
--- a/Test/baseResults/spv.8bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.8bitstorage-uint.frag.out
@@ -1,6 +1,6 @@
 spv.8bitstorage-uint.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 173
 
                               Capability Shader
diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out
index c893f88..d075b36 100644
--- a/Test/baseResults/spv.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.AnyHitShader.rahit.out
@@ -1,6 +1,6 @@
 spv.AnyHitShader.rahit
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 81
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.AnyHitShaderMotion.rahit.out b/Test/baseResults/spv.AnyHitShaderMotion.rahit.out
index f9e1e1b..3d859db 100644
--- a/Test/baseResults/spv.AnyHitShaderMotion.rahit.out
+++ b/Test/baseResults/spv.AnyHitShaderMotion.rahit.out
@@ -1,6 +1,6 @@
 spv.AnyHitShaderMotion.rahit
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 14
 
                               Capability RayTracingKHR
diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index 57cdcb0..b2df36a 100644
--- a/Test/baseResults/spv.AofA.frag.out
+++ b/Test/baseResults/spv.AofA.frag.out
@@ -3,7 +3,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 104
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out
index b76629c..80b5115 100644
--- a/Test/baseResults/spv.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ClosestHitShader.rchit.out
@@ -1,6 +1,6 @@
 spv.ClosestHitShader.rchit
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 88
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out
index e89abb4..e20df80 100644
--- a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out
+++ b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out
@@ -1,6 +1,6 @@
 spv.ClosestHitShaderMotion.rchit
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 33
 
                               Capability RayTracingKHR
@@ -21,7 +21,6 @@
                               Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV
                               Decorate 16(accEXT) DescriptorSet 0
                               Decorate 16(accEXT) Binding 0
-                              Decorate 32(incomingPayloadEXT) Location 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 4b29238..57fa691 100644
--- a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
+++ b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
@@ -1,6 +1,6 @@
 spv.GeometryShaderPassthrough.geom
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 15
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.IntersectShader.rint.out b/Test/baseResults/spv.IntersectShader.rint.out
index 7b0058c..81d86cd 100644
--- a/Test/baseResults/spv.IntersectShader.rint.out
+++ b/Test/baseResults/spv.IntersectShader.rint.out
@@ -1,6 +1,6 @@
 spv.IntersectShader.rint
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 71
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.IntersectShaderMotion.rint.out b/Test/baseResults/spv.IntersectShaderMotion.rint.out
index f77c9a8..b3326ee 100644
--- a/Test/baseResults/spv.IntersectShaderMotion.rint.out
+++ b/Test/baseResults/spv.IntersectShaderMotion.rint.out
@@ -1,6 +1,6 @@
 spv.IntersectShaderMotion.rint
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 14
 
                               Capability RayTracingKHR
diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out
index e573bba..581c0c6 100644
--- a/Test/baseResults/spv.MissShader.rmiss.out
+++ b/Test/baseResults/spv.MissShader.rmiss.out
@@ -1,6 +1,6 @@
 spv.MissShader.rmiss
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 59
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.MissShaderMotion.rmiss.out b/Test/baseResults/spv.MissShaderMotion.rmiss.out
index 2f18338..220dda9 100644
--- a/Test/baseResults/spv.MissShaderMotion.rmiss.out
+++ b/Test/baseResults/spv.MissShaderMotion.rmiss.out
@@ -1,6 +1,6 @@
 spv.MissShaderMotion.rmiss
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 33
 
                               Capability RayTracingKHR
@@ -21,7 +21,6 @@
                               Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV
                               Decorate 16(accEXT) DescriptorSet 0
                               Decorate 16(accEXT) Binding 0
-                              Decorate 32(localPayloadEXT) Location 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 90afed2..df7d949 100644
--- a/Test/baseResults/spv.OVR_multiview.vert.out
+++ b/Test/baseResults/spv.OVR_multiview.vert.out
@@ -1,6 +1,6 @@
 spv.OVR_multiview.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index fc8e241..f9059c6 100644
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -1,6 +1,6 @@
 spv.Operations.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 591
 
                               Capability Shader
diff --git a/Test/baseResults/spv.RayCallable.rcall.out b/Test/baseResults/spv.RayCallable.rcall.out
index 75698fc..1eff1fa 100644
--- a/Test/baseResults/spv.RayCallable.rcall.out
+++ b/Test/baseResults/spv.RayCallable.rcall.out
@@ -1,6 +1,6 @@
 spv.RayCallable.rcall
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out
index 962aeb7..ebdcb50 100644
--- a/Test/baseResults/spv.RayConstants.rgen.out
+++ b/Test/baseResults/spv.RayConstants.rgen.out
@@ -1,6 +1,6 @@
 spv.RayConstants.rgen
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
index b708537..01fdbf0 100644
--- a/Test/baseResults/spv.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.RayGenShader.rgen.out
@@ -1,6 +1,6 @@
 spv.RayGenShader.rgen
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 54
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out
index 48509b0..ae55e65 100644
--- a/Test/baseResults/spv.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.RayGenShader11.rgen.out
@@ -1,6 +1,6 @@
 spv.RayGenShader11.rgen
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 53
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out
index 8ddfca9..c3bd191 100644
--- a/Test/baseResults/spv.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.RayGenShaderArray.rgen.out
@@ -1,6 +1,6 @@
 spv.RayGenShaderArray.rgen
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 89
 
                               Capability ShaderNonUniformEXT
diff --git a/Test/baseResults/spv.RayGenShaderMotion.rgen.out b/Test/baseResults/spv.RayGenShaderMotion.rgen.out
index f9b9fa5..9a3421c 100644
--- a/Test/baseResults/spv.RayGenShaderMotion.rgen.out
+++ b/Test/baseResults/spv.RayGenShaderMotion.rgen.out
@@ -1,6 +1,6 @@
 spv.RayGenShaderMotion.rgen
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 47
 
                               Capability RayTracingKHR
@@ -26,7 +26,6 @@
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 29(accEXT) DescriptorSet 0
                               Decorate 29(accEXT) Binding 0
-                              Decorate 46(payloadEXT) Location 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 31dd2dd..4001462 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out
@@ -1,6 +1,6 @@
 spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out
index 3447791..d0906a4 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out
@@ -1,6 +1,6 @@
 spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out
index b578bd3..2a15286 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out
@@ -1,6 +1,6 @@
 spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out
index 19bcff6..9a9e919 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out
@@ -1,6 +1,6 @@
 spv.WorkgroupMemoryExplicitLayout.NonBlock.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out
index 413fd2e..cb3bd31 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out
@@ -1,6 +1,6 @@
 spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out
index 6a43e23..3d7ece1 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out
@@ -1,6 +1,6 @@
 spv.WorkgroupMemoryExplicitLayout.scalar.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out
index df4b8ae..5c8f86d 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out
@@ -1,6 +1,6 @@
 spv.WorkgroupMemoryExplicitLayout.std140.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out
index e782784..bfc35e9 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out
@@ -1,6 +1,6 @@
 spv.WorkgroupMemoryExplicitLayout.std430.comp
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
index 379131b..2426999 100644
--- a/Test/baseResults/spv.accessChain.frag.out
+++ b/Test/baseResults/spv.accessChain.frag.out
@@ -1,6 +1,6 @@
 spv.accessChain.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 228
 
                               Capability Shader
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
index 05b14ea..bc19f23 100644
--- a/Test/baseResults/spv.aggOps.frag.out
+++ b/Test/baseResults/spv.aggOps.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 215
 
                               Capability Shader
diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out
index ed21b38..ba3331a 100644
--- a/Test/baseResults/spv.always-discard.frag.out
+++ b/Test/baseResults/spv.always-discard.frag.out
@@ -1,6 +1,6 @@
 spv.always-discard.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
index 5e7ac9f..60262f7 100644
--- a/Test/baseResults/spv.always-discard2.frag.out
+++ b/Test/baseResults/spv.always-discard2.frag.out
@@ -1,6 +1,6 @@
 spv.always-discard2.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.arbPostDepthCoverage.frag.out b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
index 9b911cf..5daa156 100644
--- a/Test/baseResults/spv.arbPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.arbPostDepthCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomiAddEXT.error.mesh.out b/Test/baseResults/spv.atomiAddEXT.error.mesh.out
new file mode 100644
index 0000000..ce8f3d7
--- /dev/null
+++ b/Test/baseResults/spv.atomiAddEXT.error.mesh.out
@@ -0,0 +1,7 @@
+spv.atomiAddEXT.error.mesh
+ERROR: 0:21: 'assign' :  l-value required "mytask" (can't modify variable with storage qualifier taskPayloadSharedEXT in mesh shaders)
+ERROR: 0:21: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. 
+ERROR: 2 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.atomiAddEXT.task.out b/Test/baseResults/spv.atomiAddEXT.task.out
new file mode 100644
index 0000000..9ff35aa
--- /dev/null
+++ b/Test/baseResults/spv.atomiAddEXT.task.out
@@ -0,0 +1,71 @@
+spv.atomiAddEXT.task
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 34
+
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TaskEXT 4  "main" 9 23 28
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 7  "Buffer"
+                              MemberName 7(Buffer) 0  "x"
+                              Name 9  ""
+                              Name 20  "structType"
+                              MemberName 20(structType) 0  "y"
+                              Name 21  "t2"
+                              MemberName 21(t2) 0  "f"
+                              Name 23  "t"
+                              Name 26  "taskBlock"
+                              MemberName 26(taskBlock) 0  "atom1"
+                              Name 28  "mytask"
+                              MemberDecorate 7(Buffer) 0 Coherent
+                              MemberDecorate 7(Buffer) 0 Offset 0
+                              Decorate 7(Buffer) Block
+                              Decorate 9 DescriptorSet 0
+                              Decorate 9 Binding 1
+                              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
+                              Decorate 23(t) Binding 0
+                              Decorate 33 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+       7(Buffer):             TypeStruct 6(int)
+               8:             TypePointer StorageBuffer 7(Buffer)
+               9:      8(ptr) Variable StorageBuffer
+              10:      6(int) Constant 0
+              11:             TypePointer StorageBuffer 6(int)
+              13:      6(int) Constant 1
+              14:             TypeInt 32 0
+              15:     14(int) Constant 1
+              16:     14(int) Constant 0
+              18:     14(int) Constant 3
+              19:             TypeArray 6(int) 18
+  20(structType):             TypeStruct 19
+          21(t2):             TypeStruct 20(structType)
+              22:             TypePointer StorageBuffer 21(t2)
+           23(t):     22(ptr) Variable StorageBuffer
+   26(taskBlock):             TypeStruct 6(int)
+              27:             TypePointer TaskPayloadWorkgroupEXT 26(taskBlock)
+      28(mytask):     27(ptr) Variable TaskPayloadWorkgroupEXT
+              29:             TypePointer TaskPayloadWorkgroupEXT 6(int)
+              32:             TypeVector 14(int) 3
+              33:   32(ivec3) ConstantComposite 15 15 15
+         4(main):           2 Function None 3
+               5:             Label
+              12:     11(ptr) AccessChain 9 10
+              17:      6(int) AtomicIAdd 12 15 16 13
+              24:     11(ptr) AccessChain 23(t) 10 10 13
+              25:      6(int) AtomicIAdd 24 15 16 13
+              30:     29(ptr) AccessChain 28(mytask) 10
+              31:      6(int) AtomicIAdd 30 15 16 13
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
index e74066c..7c001ae 100644
--- a/Test/baseResults/spv.atomic.comp.out
+++ b/Test/baseResults/spv.atomic.comp.out
@@ -1,6 +1,6 @@
 spv.atomic.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 74
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomicAdd.bufferReference.comp.out b/Test/baseResults/spv.atomicAdd.bufferReference.comp.out
index 9ecc742..a00c45a 100644
--- a/Test/baseResults/spv.atomicAdd.bufferReference.comp.out
+++ b/Test/baseResults/spv.atomicAdd.bufferReference.comp.out
@@ -1,6 +1,6 @@
 spv.atomicAdd.bufferReference.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 188
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomicFloat.comp.out b/Test/baseResults/spv.atomicFloat.comp.out
index 3799557..acb5d81 100644
--- a/Test/baseResults/spv.atomicFloat.comp.out
+++ b/Test/baseResults/spv.atomicFloat.comp.out
@@ -1,6 +1,6 @@
 spv.atomicFloat.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 470
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomicInt64.comp.out b/Test/baseResults/spv.atomicInt64.comp.out
index 5b2e134..24805cc 100644
--- a/Test/baseResults/spv.atomicInt64.comp.out
+++ b/Test/baseResults/spv.atomicInt64.comp.out
@@ -1,6 +1,6 @@
 spv.atomicInt64.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 149
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomicStoreInt64.comp.out b/Test/baseResults/spv.atomicStoreInt64.comp.out
index 3adadcb..c2b3f30 100644
--- a/Test/baseResults/spv.atomicStoreInt64.comp.out
+++ b/Test/baseResults/spv.atomicStoreInt64.comp.out
@@ -1,6 +1,6 @@
 spv.atomicStoreInt64.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.barrier.vert.out b/Test/baseResults/spv.barrier.vert.out
index 7199882..5208412 100644
--- a/Test/baseResults/spv.barrier.vert.out
+++ b/Test/baseResults/spv.barrier.vert.out
@@ -1,6 +1,6 @@
 spv.barrier.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out
index 88b2a09..9b3c9ec 100644
--- a/Test/baseResults/spv.bitCast.frag.out
+++ b/Test/baseResults/spv.bitCast.frag.out
@@ -1,6 +1,6 @@
 spv.bitCast.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
index fb7c686..265d900 100644
--- a/Test/baseResults/spv.bool.vert.out
+++ b/Test/baseResults/spv.bool.vert.out
@@ -1,6 +1,6 @@
 spv.bool.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index 004c204..c234cb4 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -1,6 +1,6 @@
 spv.boolInBlock.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 102
 
                               Capability Shader
diff --git a/Test/baseResults/spv.branch-return.vert.out b/Test/baseResults/spv.branch-return.vert.out
index 30918ab..53ef876 100644
--- a/Test/baseResults/spv.branch-return.vert.out
+++ b/Test/baseResults/spv.branch-return.vert.out
@@ -1,6 +1,6 @@
 spv.branch-return.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.buffer.autoassign.frag.out b/Test/baseResults/spv.buffer.autoassign.frag.out
index 3475266..3afe643 100644
--- a/Test/baseResults/spv.buffer.autoassign.frag.out
+++ b/Test/baseResults/spv.buffer.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.buffer.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle1.frag.out b/Test/baseResults/spv.bufferhandle1.frag.out
index b49c129..c44ad2a 100644
--- a/Test/baseResults/spv.bufferhandle1.frag.out
+++ b/Test/baseResults/spv.bufferhandle1.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle1.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle10.frag.out b/Test/baseResults/spv.bufferhandle10.frag.out
index f9ab60d..93c3f70 100644
--- a/Test/baseResults/spv.bufferhandle10.frag.out
+++ b/Test/baseResults/spv.bufferhandle10.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle10.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out
index 9dd1c7b..eec3cf3 100644
--- a/Test/baseResults/spv.bufferhandle11.frag.out
+++ b/Test/baseResults/spv.bufferhandle11.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle12.frag.out b/Test/baseResults/spv.bufferhandle12.frag.out
index 7cd5cb5..319684f 100644
--- a/Test/baseResults/spv.bufferhandle12.frag.out
+++ b/Test/baseResults/spv.bufferhandle12.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 183
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle13.frag.out b/Test/baseResults/spv.bufferhandle13.frag.out
index 5ce24ac..dd43089 100644
--- a/Test/baseResults/spv.bufferhandle13.frag.out
+++ b/Test/baseResults/spv.bufferhandle13.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle13.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle14.frag.out b/Test/baseResults/spv.bufferhandle14.frag.out
index 34df753..4f994e1 100644
--- a/Test/baseResults/spv.bufferhandle14.frag.out
+++ b/Test/baseResults/spv.bufferhandle14.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle14.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle15.frag.out b/Test/baseResults/spv.bufferhandle15.frag.out
index ab1b4db..34d3d59 100644
--- a/Test/baseResults/spv.bufferhandle15.frag.out
+++ b/Test/baseResults/spv.bufferhandle15.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle16.frag.out b/Test/baseResults/spv.bufferhandle16.frag.out
index a9d9dcf..ee04d36 100644
--- a/Test/baseResults/spv.bufferhandle16.frag.out
+++ b/Test/baseResults/spv.bufferhandle16.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle16.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle18.frag.out b/Test/baseResults/spv.bufferhandle18.frag.out
index 59ad6d0..97c961a 100644
--- a/Test/baseResults/spv.bufferhandle18.frag.out
+++ b/Test/baseResults/spv.bufferhandle18.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle18.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 196
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle2.frag.out b/Test/baseResults/spv.bufferhandle2.frag.out
index e20f3b7..31a39f2 100644
--- a/Test/baseResults/spv.bufferhandle2.frag.out
+++ b/Test/baseResults/spv.bufferhandle2.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle2.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle3.frag.out b/Test/baseResults/spv.bufferhandle3.frag.out
index 65ad1ca..9f66b5c 100644
--- a/Test/baseResults/spv.bufferhandle3.frag.out
+++ b/Test/baseResults/spv.bufferhandle3.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle3.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out
index e06bca4..1ccb609 100644
--- a/Test/baseResults/spv.bufferhandle4.frag.out
+++ b/Test/baseResults/spv.bufferhandle4.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle4.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle5.frag.out b/Test/baseResults/spv.bufferhandle5.frag.out
index bf4d3a2..0bcb34b 100644
--- a/Test/baseResults/spv.bufferhandle5.frag.out
+++ b/Test/baseResults/spv.bufferhandle5.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle5.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle6.frag.out b/Test/baseResults/spv.bufferhandle6.frag.out
index abc9187..758a30b 100644
--- a/Test/baseResults/spv.bufferhandle6.frag.out
+++ b/Test/baseResults/spv.bufferhandle6.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle6.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 165
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle7.frag.out b/Test/baseResults/spv.bufferhandle7.frag.out
index 4282a36..070adb7 100644
--- a/Test/baseResults/spv.bufferhandle7.frag.out
+++ b/Test/baseResults/spv.bufferhandle7.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle7.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out
index 65d4665..4960144 100644
--- a/Test/baseResults/spv.bufferhandle8.frag.out
+++ b/Test/baseResults/spv.bufferhandle8.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle8.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle9.frag.out b/Test/baseResults/spv.bufferhandle9.frag.out
index 1e5091c..ff7ede7 100644
--- a/Test/baseResults/spv.bufferhandle9.frag.out
+++ b/Test/baseResults/spv.bufferhandle9.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle9.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out
index fbdbb6a..133190e 100644
--- a/Test/baseResults/spv.bufferhandleUvec2.frag.out
+++ b/Test/baseResults/spv.bufferhandleUvec2.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandleUvec2.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 71
 
                               Capability Shader
diff --git a/Test/baseResults/spv.builtInXFB.vert.out b/Test/baseResults/spv.builtInXFB.vert.out
index 1f612e2..b3a3e12 100644
--- a/Test/baseResults/spv.builtInXFB.vert.out
+++ b/Test/baseResults/spv.builtInXFB.vert.out
@@ -1,6 +1,6 @@
 spv.builtInXFB.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out b/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out
index 8daa79e..0191185 100644
--- a/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out
+++ b/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out
@@ -1,6 +1,6 @@
 spv.builtin.PrimitiveShadingRateEXT.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out
index 95b94d2..5707fb9 100644
--- a/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out
+++ b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 12
 
                               Capability Shader
diff --git a/Test/baseResults/spv.computeShaderDerivatives.comp.out b/Test/baseResults/spv.computeShaderDerivatives.comp.out
index a713845..4761078 100644
--- a/Test/baseResults/spv.computeShaderDerivatives.comp.out
+++ b/Test/baseResults/spv.computeShaderDerivatives.comp.out
@@ -1,6 +1,6 @@
 spv.computeShaderDerivatives.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 212
 
                               Capability Shader
diff --git a/Test/baseResults/spv.computeShaderDerivatives2.comp.out b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
index 3c3d54e..52b5474 100644
--- a/Test/baseResults/spv.computeShaderDerivatives2.comp.out
+++ b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
@@ -1,6 +1,6 @@
 spv.computeShaderDerivatives2.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 212
 
                               Capability Shader
diff --git a/Test/baseResults/spv.conditionalDemote.frag.out b/Test/baseResults/spv.conditionalDemote.frag.out
index dfd4596..84c816b 100644
--- a/Test/baseResults/spv.conditionalDemote.frag.out
+++ b/Test/baseResults/spv.conditionalDemote.frag.out
@@ -1,6 +1,6 @@
 spv.conditionalDemote.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
index 2e53e9b..f31fa85 100644
--- a/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -1,6 +1,6 @@
 spv.conditionalDiscard.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/spv.constConstruct.vert.out b/Test/baseResults/spv.constConstruct.vert.out
index db637a9..3dc42ed 100644
--- a/Test/baseResults/spv.constConstruct.vert.out
+++ b/Test/baseResults/spv.constConstruct.vert.out
@@ -1,12 +1,14 @@
 spv.constConstruct.vert
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 150
 
                               Capability Shader
+                              Capability Float16
                               Capability Float64
                               Capability Int64
+                              Capability Int16
+                              Capability Int8
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Vertex 4  "main"
diff --git a/Test/baseResults/spv.constStruct.vert.out b/Test/baseResults/spv.constStruct.vert.out
index 61d0e54..6abc009 100644
--- a/Test/baseResults/spv.constStruct.vert.out
+++ b/Test/baseResults/spv.constStruct.vert.out
@@ -1,6 +1,6 @@
 spv.constStruct.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.constructComposite.comp.out b/Test/baseResults/spv.constructComposite.comp.out
index 73d663b..491a33f 100644
--- a/Test/baseResults/spv.constructComposite.comp.out
+++ b/Test/baseResults/spv.constructComposite.comp.out
@@ -1,6 +1,6 @@
 spv.constructComposite.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.controlFlowAttributes.frag.out b/Test/baseResults/spv.controlFlowAttributes.frag.out
index cf34ae2..038711d 100644
--- a/Test/baseResults/spv.controlFlowAttributes.frag.out
+++ b/Test/baseResults/spv.controlFlowAttributes.frag.out
@@ -9,7 +9,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 123
 
                               Capability Shader
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
index b600b38..5ddf7db 100644
--- a/Test/baseResults/spv.conversion.frag.out
+++ b/Test/baseResults/spv.conversion.frag.out
@@ -1,6 +1,6 @@
 spv.conversion.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 455
 
                               Capability Shader
diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out
index 0a609df..b594af2 100644
--- a/Test/baseResults/spv.coopmat.comp.out
+++ b/Test/baseResults/spv.coopmat.comp.out
@@ -1,6 +1,6 @@
 spv.coopmat.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 228
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
index 980d1bd..b3bc623 100644
--- a/Test/baseResults/spv.dataOut.frag.out
+++ b/Test/baseResults/spv.dataOut.frag.out
@@ -1,7 +1,7 @@
 spv.dataOut.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
index a75e8d5..d07cfe9 100644
--- a/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -1,6 +1,6 @@
 spv.dataOutIndirect.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
index 1c29410..712cd13 100644
--- a/Test/baseResults/spv.dataOutIndirect.vert.out
+++ b/Test/baseResults/spv.dataOutIndirect.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:3: attribute deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-continue.vert.out b/Test/baseResults/spv.dead-after-continue.vert.out
index 6d8d7d9..1102481 100644
--- a/Test/baseResults/spv.dead-after-continue.vert.out
+++ b/Test/baseResults/spv.dead-after-continue.vert.out
@@ -1,6 +1,6 @@
 spv.dead-after-continue.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-discard.frag.out b/Test/baseResults/spv.dead-after-discard.frag.out
index 987f5a2..2948e22 100644
--- a/Test/baseResults/spv.dead-after-discard.frag.out
+++ b/Test/baseResults/spv.dead-after-discard.frag.out
@@ -1,6 +1,6 @@
 spv.dead-after-discard.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-loop-break.vert.out b/Test/baseResults/spv.dead-after-loop-break.vert.out
index 2d9e35a..490dbcc 100644
--- a/Test/baseResults/spv.dead-after-loop-break.vert.out
+++ b/Test/baseResults/spv.dead-after-loop-break.vert.out
@@ -1,6 +1,6 @@
 spv.dead-after-loop-break.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-return.vert.out b/Test/baseResults/spv.dead-after-return.vert.out
index d6ba2c7..0969363 100644
--- a/Test/baseResults/spv.dead-after-return.vert.out
+++ b/Test/baseResults/spv.dead-after-return.vert.out
@@ -1,6 +1,6 @@
 spv.dead-after-return.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 14
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-switch-break.vert.out b/Test/baseResults/spv.dead-after-switch-break.vert.out
index f8bc4d0..744355d 100644
--- a/Test/baseResults/spv.dead-after-switch-break.vert.out
+++ b/Test/baseResults/spv.dead-after-switch-break.vert.out
@@ -1,6 +1,6 @@
 spv.dead-after-switch-break.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-complex-continue-after-return.vert.out b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
index 3db78ec..3c41ff8 100644
--- a/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
+++ b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
@@ -1,6 +1,6 @@
 spv.dead-complex-continue-after-return.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-complex-merge-after-return.vert.out b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
index cc1b25c..52431a3 100644
--- a/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
+++ b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
@@ -1,6 +1,6 @@
 spv.dead-complex-merge-after-return.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out
index 78044ff..67175de 100644
--- a/Test/baseResults/spv.debugInfo.1.1.frag.out
+++ b/Test/baseResults/spv.debugInfo.1.1.frag.out
@@ -1,6 +1,6 @@
 spv.debugInfo.frag
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 124
 
                               Capability Shader
@@ -136,6 +136,7 @@
              109:      7(int) Constant 1
              111:             TypePointer Output 10(float)
              114:   10(float) Constant 1092616192
+                              Line 1 28 11
          5(main):           3 Function None 4
                6:             Label
        57(param):      9(ptr) Variable Function
@@ -195,9 +196,11 @@
                               Store 97(i) 18
                               Branch 98
               98:             Label
+                              Line 1 46 0
                               LoopMerge 100 101 None
                               Branch 102
              102:             Label
+                              Line 1 46 0
              103:      7(int) Load 97(i)
              105:    37(bool) SLessThan 103 104
                               BranchConditional 105 99 100
@@ -237,6 +240,7 @@
              118:             Label
                               Return
                               FunctionEnd
+                              Line 1 16 13
 14(foo(struct-S-i11;):   11(fvec4) Function None 12
            13(s):      9(ptr) FunctionParameter
               15:             Label
diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out
index e146398..b9eb496 100644
--- a/Test/baseResults/spv.debugInfo.frag.out
+++ b/Test/baseResults/spv.debugInfo.frag.out
@@ -1,6 +1,6 @@
 spv.debugInfo.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 124
 
                               Capability Shader
@@ -137,6 +137,7 @@
              109:      7(int) Constant 1
              111:             TypePointer Output 10(float)
              114:   10(float) Constant 1092616192
+                              Line 1 28 11
          5(main):           3 Function None 4
                6:             Label
        57(param):      9(ptr) Variable Function
@@ -196,9 +197,11 @@
                               Store 97(i) 18
                               Branch 98
               98:             Label
+                              Line 1 46 0
                               LoopMerge 100 101 None
                               Branch 102
              102:             Label
+                              Line 1 46 0
              103:      7(int) Load 97(i)
              105:    37(bool) SLessThan 103 104
                               BranchConditional 105 99 100
@@ -238,6 +241,7 @@
              118:             Label
                               Return
                               FunctionEnd
+                              Line 1 16 13
 14(foo(struct-S-i11;):   11(fvec4) Function None 12
            13(s):      9(ptr) FunctionParameter
               15:             Label
diff --git a/Test/baseResults/spv.debugPrintf.frag.out b/Test/baseResults/spv.debugPrintf.frag.out
index 6517415..428e598 100644
--- a/Test/baseResults/spv.debugPrintf.frag.out
+++ b/Test/baseResults/spv.debugPrintf.frag.out
@@ -1,6 +1,6 @@
 spv.debugPrintf.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.debuginfo.glsl.comp.out b/Test/baseResults/spv.debuginfo.glsl.comp.out
new file mode 100644
index 0000000..9e46450
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.glsl.comp.out
@@ -0,0 +1,1063 @@
+spv.debuginfo.glsl.comp
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 817
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 13  "main" 118
+                              ExecutionMode 13 LocalSize 10 10 1
+               8:             String  "uint"
+              14:             String  "main"
+              17:             String  ""
+              24:             String  "float"
+              36:             String  "springForce"
+              42:             String  "p0"
+              46:             String  "p1"
+              49:             String  "restDist"
+              54:             String  "dist"
+              65:             String  "int"
+              71:             String  "sphereRadius"
+              82:             String  "gravity"
+              87:             String  "particleCount"
+              90:             String  "UBO"
+              95:             String  "params"
+             114:             String  "id"
+             120:             String  "gl_GlobalInvocationID"
+             125:             String  "index"
+             147:             String  "bool"
+             155:             String  "normal"
+             161:             String  "pinned"
+             163:             String  "Particle"
+             169:             String  "particleIn"
+             173:             String  "ParticleIn"
+             191:             String  "particleOut"
+             194:             String  "ParticleOut"
+             213:             String  "force"
+             225:             String  "pos"
+             234:             String  "vel"
+             487:             String  "f"
+             531:             String  "sphereDist"
+             575:             String  "calculateNormals"
+             578:             String  "PushConsts"
+             583:             String  "pushConsts"
+             610:             String  "a"
+             622:             String  "b"
+             638:             String  "c"
+                              Name 13  "main"
+                              Name 35  "springForce(vf3;vf3;f1;"
+                              Name 32  "p0"
+                              Name 33  "p1"
+                              Name 34  "restDist"
+                              Name 52  "dist"
+                              Name 69  "UBO"
+                              MemberName 69(UBO) 0  "deltaT"
+                              MemberName 69(UBO) 1  "particleMass"
+                              MemberName 69(UBO) 2  "springStiffness"
+                              MemberName 69(UBO) 3  "damping"
+                              MemberName 69(UBO) 4  "restDistH"
+                              MemberName 69(UBO) 5  "restDistV"
+                              MemberName 69(UBO) 6  "restDistD"
+                              MemberName 69(UBO) 7  "sphereRadius"
+                              MemberName 69(UBO) 8  "spherePos"
+                              MemberName 69(UBO) 9  "gravity"
+                              MemberName 69(UBO) 10  "particleCount"
+                              Name 93  "params"
+                              Name 112  "id"
+                              Name 118  "gl_GlobalInvocationID"
+                              Name 123  "index"
+                              Name 153  "Particle"
+                              MemberName 153(Particle) 0  "pos"
+                              MemberName 153(Particle) 1  "vel"
+                              MemberName 153(Particle) 2  "uv"
+                              MemberName 153(Particle) 3  "normal"
+                              MemberName 153(Particle) 4  "pinned"
+                              Name 167  "ParticleIn"
+                              MemberName 167(ParticleIn) 0  "particleIn"
+                              Name 175  ""
+                              Name 189  "ParticleOut"
+                              MemberName 189(ParticleOut) 0  "particleOut"
+                              Name 197  ""
+                              Name 211  "force"
+                              Name 223  "pos"
+                              Name 232  "vel"
+                              Name 249  "param"
+                              Name 253  "param"
+                              Name 255  "param"
+                              Name 273  "param"
+                              Name 277  "param"
+                              Name 279  "param"
+                              Name 301  "param"
+                              Name 305  "param"
+                              Name 307  "param"
+                              Name 324  "param"
+                              Name 328  "param"
+                              Name 330  "param"
+                              Name 360  "param"
+                              Name 364  "param"
+                              Name 366  "param"
+                              Name 391  "param"
+                              Name 395  "param"
+                              Name 397  "param"
+                              Name 430  "param"
+                              Name 434  "param"
+                              Name 436  "param"
+                              Name 465  "param"
+                              Name 469  "param"
+                              Name 471  "param"
+                              Name 485  "f"
+                              Name 529  "sphereDist"
+                              Name 573  "PushConsts"
+                              MemberName 573(PushConsts) 0  "calculateNormals"
+                              Name 581  "pushConsts"
+                              Name 591  "normal"
+                              Name 608  "a"
+                              Name 620  "b"
+                              Name 636  "c"
+                              MemberDecorate 69(UBO) 0 Offset 0
+                              MemberDecorate 69(UBO) 1 Offset 4
+                              MemberDecorate 69(UBO) 2 Offset 8
+                              MemberDecorate 69(UBO) 3 Offset 12
+                              MemberDecorate 69(UBO) 4 Offset 16
+                              MemberDecorate 69(UBO) 5 Offset 20
+                              MemberDecorate 69(UBO) 6 Offset 24
+                              MemberDecorate 69(UBO) 7 Offset 28
+                              MemberDecorate 69(UBO) 8 Offset 32
+                              MemberDecorate 69(UBO) 9 Offset 48
+                              MemberDecorate 69(UBO) 10 Offset 64
+                              Decorate 69(UBO) Block
+                              Decorate 93(params) DescriptorSet 0
+                              Decorate 93(params) Binding 2
+                              Decorate 118(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
+                              MemberDecorate 153(Particle) 0 Offset 0
+                              MemberDecorate 153(Particle) 1 Offset 16
+                              MemberDecorate 153(Particle) 2 Offset 32
+                              MemberDecorate 153(Particle) 3 Offset 48
+                              MemberDecorate 153(Particle) 4 Offset 64
+                              Decorate 165 ArrayStride 80
+                              MemberDecorate 167(ParticleIn) 0 Offset 0
+                              Decorate 167(ParticleIn) BufferBlock
+                              Decorate 175 DescriptorSet 0
+                              Decorate 175 Binding 0
+                              Decorate 187 ArrayStride 80
+                              MemberDecorate 189(ParticleOut) 0 Offset 0
+                              Decorate 189(ParticleOut) BufferBlock
+                              Decorate 197 DescriptorSet 0
+                              Decorate 197 Binding 1
+                              MemberDecorate 573(PushConsts) 0 Offset 0
+                              Decorate 573(PushConsts) Block
+                              Decorate 816 BuiltIn WorkgroupSize
+               3:             TypeVoid
+               4:             TypeFunction 3
+               6:             TypeInt 32 0
+               9:      6(int) Constant 32
+              10:      6(int) Constant 6
+              11:      6(int) Constant 0
+               7:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 8 9 10 11
+              12:      6(int) Constant 3
+               5:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 3
+              16:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 17
+              19:      6(int) Constant 1
+              20:      6(int) Constant 4
+              21:      6(int) Constant 2
+              18:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 19 20 16 21
+              15:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 14 5 16 11 11 18 14 12 11
+              23:             TypeFloat 32
+              25:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 24 9 12 11
+              26:             TypeVector 23(float) 3
+              27:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 12
+              28:             TypePointer Function 26(fvec3)
+              29:             TypePointer Function 23(float)
+              30:             TypeFunction 26(fvec3) 28(ptr) 28(ptr) 29(ptr)
+              31:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 27 27 27 25
+              37:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 36 31 16 11 11 18 36 12 11
+              41:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 42 27 16 11 11 37 20 19
+              44:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 46 27 16 11 11 37 20 21
+              48:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 49 25 16 11 11 37 20 12
+              55:      6(int) Constant 68
+              53:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 54 27 16 55 11 37 20
+              62:             TypeVector 23(float) 4
+              63:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 20
+              64:             TypeInt 32 1
+              66:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 65 9 20 11
+              67:             TypeVector 64(int) 2
+              68:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 66 21
+         69(UBO):             TypeStruct 23(float) 23(float) 23(float) 23(float) 23(float) 23(float) 23(float) 23(float) 62(fvec4) 62(fvec4) 67(ivec2)
+              72:      6(int) Constant 56
+              73:      6(int) Constant 8
+              70:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 71 25 16 72 73 11 11 12
+              74:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 71 25 16 72 73 11 11 12
+              75:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 71 25 16 72 73 11 11 12
+              76:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 71 25 16 72 73 11 11 12
+              77:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 71 25 16 72 73 11 11 12
+              78:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 71 25 16 72 73 11 11 12
+              79:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 71 25 16 72 73 11 11 12
+              80:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 71 25 16 72 73 11 11 12
+              83:      6(int) Constant 58
+              84:      6(int) Constant 7
+              81:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 82 63 16 83 84 11 11 12
+              85:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 82 63 16 83 84 11 11 12
+              88:      6(int) Constant 59
+              86:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 87 68 16 88 73 11 11 12
+              91:      6(int) Constant 69
+              89:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 90 19 16 91 11 18 90 11 12 70 74 75 76 77 78 79 80 81 85 86
+              92:             TypePointer Uniform 69(UBO)
+      93(params):     92(ptr) Variable Uniform
+              94:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 95 89 16 91 11 18 95 93(params) 73
+              96:     64(int) Constant 2
+              97:             TypePointer Uniform 23(float)
+             109:             TypeVector 6(int) 3
+             110:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 7 12
+             111:             TypePointer Function 109(ivec3)
+             115:      6(int) Constant 74
+             113:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 114 110 16 115 11 15 20
+             117:             TypePointer Input 109(ivec3)
+118(gl_GlobalInvocationID):    117(ptr) Variable Input
+             119:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 120 110 16 115 11 18 120 118(gl_GlobalInvocationID) 73
+             122:             TypePointer Function 6(int)
+             126:      6(int) Constant 76
+             124:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 125 7 16 126 11 15 20
+             130:     64(int) Constant 10
+             131:             TypePointer Uniform 64(int)
+             146:             TypeBool
+             148:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+   153(Particle):             TypeStruct 62(fvec4) 62(fvec4) 62(fvec4) 62(fvec4) 23(float)
+             156:      6(int) Constant 31
+             154:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 155 63 16 156 84 11 11 12
+             157:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 155 63 16 156 84 11 11 12
+             158:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 155 63 16 156 84 11 11 12
+             159:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 155 63 16 156 84 11 11 12
+             160:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 161 25 16 9 73 11 11 12
+             164:      6(int) Constant 81
+             162:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 163 19 16 164 11 18 163 11 12 154 157 158 159 160
+             165:             TypeRuntimeArray 153(Particle)
+             166:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 162 11
+ 167(ParticleIn):             TypeStruct 165
+             170:      6(int) Constant 36
+             171:      6(int) Constant 11
+             168:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 169 166 16 170 171 11 11 12
+             172:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 173 19 16 164 11 18 173 11 12 168
+             174:             TypePointer Uniform 167(ParticleIn)
+             175:    174(ptr) Variable Uniform
+             176:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 17 172 16 164 11 18 17 175 73
+             177:     64(int) Constant 0
+             179:     64(int) Constant 4
+             182:   23(float) Constant 1065353216
+             183:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             187:             TypeRuntimeArray 153(Particle)
+             188:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 162 11
+189(ParticleOut):             TypeStruct 187
+             192:      6(int) Constant 40
+             190:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 191 188 16 192 171 11 11 12
+             195:      6(int) Constant 82
+             193:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 194 19 16 195 11 18 194 11 12 190
+             196:             TypePointer Uniform 189(ParticleOut)
+             197:    196(ptr) Variable Uniform
+             198:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 17 193 16 195 11 18 17 197 73
+             201:             TypePointer Uniform 62(fvec4)
+             206:     64(int) Constant 1
+             207:   23(float) Constant 0
+             208:   62(fvec4) ConstantComposite 207 207 207 207
+             214:      6(int) Constant 88
+             212:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 213 27 16 214 11 15 20
+             216:     64(int) Constant 9
+             226:      6(int) Constant 90
+             224:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 225 27 16 226 11 15 20
+             235:      6(int) Constant 91
+             233:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 234 27 16 235 11 15 20
+             243:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             267:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             291:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             300:     64(int) Constant 5
+             315:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             338:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             348:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             359:     64(int) Constant 6
+             374:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             380:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             409:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             419:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             448:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             454:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             477:     64(int) Constant 3
+             488:      6(int) Constant 130
+             486:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 487 27 16 488 11 15 20
+             502:   23(float) Constant 1056964608
+             532:      6(int) Constant 135
+             530:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 531 27 16 532 11 15 20
+             538:     64(int) Constant 8
+             545:     64(int) Constant 7
+             548:   23(float) Constant 1008981770
+             550:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+ 573(PushConsts):             TypeStruct 6(int)
+             576:      6(int) Constant 63
+             574:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 575 7 16 576 84 11 11 12
+             579:      6(int) Constant 144
+             577:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 578 19 16 579 11 18 578 11 12 574
+             580:             TypePointer PushConstant 573(PushConsts)
+ 581(pushConsts):    580(ptr) Variable PushConstant
+             582:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 583 577 16 579 11 18 583 581(pushConsts) 73
+             584:             TypePointer PushConstant 6(int)
+             587:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             593:      6(int) Constant 145
+             592:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 155 27 16 593 11 15 20
+             595:   26(fvec3) ConstantComposite 207 207 207
+             598:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             604:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             611:      6(int) Constant 149
+             609:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 610 27 16 611 11 15 20
+             623:      6(int) Constant 150
+             621:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 622 27 16 623 11 15 20
+             639:      6(int) Constant 151
+             637:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 638 27 16 639 11 15 20
+             666:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             713:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             719:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             766:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 147 9 21 11
+             815:      6(int) Constant 10
+             816:  109(ivec3) ConstantComposite 815 815 19
+        13(main):           3 Function None 4
+              22:             Label
+         112(id):    111(ptr) Variable Function
+      123(index):    122(ptr) Variable Function
+      211(force):     28(ptr) Variable Function
+        223(pos):     28(ptr) Variable Function
+        232(vel):     28(ptr) Variable Function
+      249(param):     28(ptr) Variable Function
+      253(param):     28(ptr) Variable Function
+      255(param):     29(ptr) Variable Function
+      273(param):     28(ptr) Variable Function
+      277(param):     28(ptr) Variable Function
+      279(param):     29(ptr) Variable Function
+      301(param):     28(ptr) Variable Function
+      305(param):     28(ptr) Variable Function
+      307(param):     29(ptr) Variable Function
+      324(param):     28(ptr) Variable Function
+      328(param):     28(ptr) Variable Function
+      330(param):     29(ptr) Variable Function
+      360(param):     28(ptr) Variable Function
+      364(param):     28(ptr) Variable Function
+      366(param):     29(ptr) Variable Function
+      391(param):     28(ptr) Variable Function
+      395(param):     28(ptr) Variable Function
+      397(param):     29(ptr) Variable Function
+      430(param):     28(ptr) Variable Function
+      434(param):     28(ptr) Variable Function
+      436(param):     29(ptr) Variable Function
+      465(param):     28(ptr) Variable Function
+      469(param):     28(ptr) Variable Function
+      471(param):     29(ptr) Variable Function
+          485(f):     28(ptr) Variable Function
+ 529(sphereDist):     28(ptr) Variable Function
+     591(normal):     28(ptr) Variable Function
+          608(a):     28(ptr) Variable Function
+          620(b):     28(ptr) Variable Function
+          636(c):     28(ptr) Variable Function
+             108:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 15 13(main)
+             116:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 113 112(id) 44
+             121:  109(ivec3) Load 118(gl_GlobalInvocationID)
+                              Store 112(id) 121
+             127:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 124 123(index) 44
+             128:    122(ptr) AccessChain 112(id) 19
+             129:      6(int) Load 128
+             132:    131(ptr) AccessChain 93(params) 130 11
+             133:     64(int) Load 132
+             134:      6(int) Bitcast 133
+             135:      6(int) IMul 129 134
+             136:    122(ptr) AccessChain 112(id) 11
+             137:      6(int) Load 136
+             138:      6(int) IAdd 135 137
+                              Store 123(index) 138
+             139:      6(int) Load 123(index)
+             140:    131(ptr) AccessChain 93(params) 130 11
+             141:     64(int) Load 140
+             142:    131(ptr) AccessChain 93(params) 130 19
+             143:     64(int) Load 142
+             144:     64(int) IMul 141 143
+             145:      6(int) Bitcast 144
+             149:   146(bool) UGreaterThan 139 145
+                              SelectionMerge 151 None
+                              BranchConditional 149 150 151
+             150:               Label
+                                Return
+             151:             Label
+             178:      6(int) Load 123(index)
+             180:     97(ptr) AccessChain 175 177 178 179
+             181:   23(float) Load 180
+             184:   146(bool) FOrdEqual 181 182
+                              SelectionMerge 186 None
+                              BranchConditional 184 185 186
+             185:               Label
+             199:      6(int)   Load 123(index)
+             200:      6(int)   Load 123(index)
+             202:    201(ptr)   AccessChain 197 177 200 177
+             203:   62(fvec4)   Load 202
+             204:    201(ptr)   AccessChain 197 177 199 177
+                                Store 204 203
+             205:      6(int)   Load 123(index)
+             209:    201(ptr)   AccessChain 197 177 205 206
+                                Store 209 208
+                                Return
+             186:             Label
+             215:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 212 211(force) 44
+             217:    201(ptr) AccessChain 93(params) 216
+             218:   62(fvec4) Load 217
+             219:   26(fvec3) VectorShuffle 218 218 0 1 2
+             220:     97(ptr) AccessChain 93(params) 206
+             221:   23(float) Load 220
+             222:   26(fvec3) VectorTimesScalar 219 221
+                              Store 211(force) 222
+             227:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 224 223(pos) 44
+             228:      6(int) Load 123(index)
+             229:    201(ptr) AccessChain 175 177 228 177
+             230:   62(fvec4) Load 229
+             231:   26(fvec3) VectorShuffle 230 230 0 1 2
+                              Store 223(pos) 231
+             236:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 233 232(vel) 44
+             237:      6(int) Load 123(index)
+             238:    201(ptr) AccessChain 175 177 237 206
+             239:   62(fvec4) Load 238
+             240:   26(fvec3) VectorShuffle 239 239 0 1 2
+                              Store 232(vel) 240
+             241:    122(ptr) AccessChain 112(id) 11
+             242:      6(int) Load 241
+             244:   146(bool) UGreaterThan 242 11
+                              SelectionMerge 246 None
+                              BranchConditional 244 245 246
+             245:               Label
+             247:      6(int)   Load 123(index)
+             248:      6(int)   ISub 247 19
+             250:    201(ptr)   AccessChain 175 177 248 177
+             251:   62(fvec4)   Load 250
+             252:   26(fvec3)   VectorShuffle 251 251 0 1 2
+                                Store 249(param) 252
+             254:   26(fvec3)   Load 223(pos)
+                                Store 253(param) 254
+             256:     97(ptr)   AccessChain 93(params) 179
+             257:   23(float)   Load 256
+                                Store 255(param) 257
+             258:   26(fvec3)   FunctionCall 35(springForce(vf3;vf3;f1;) 249(param) 253(param) 255(param)
+             259:   26(fvec3)   Load 211(force)
+             260:   26(fvec3)   FAdd 259 258
+                                Store 211(force) 260
+                                Branch 246
+             246:             Label
+             261:    122(ptr) AccessChain 112(id) 11
+             262:      6(int) Load 261
+             263:    131(ptr) AccessChain 93(params) 130 11
+             264:     64(int) Load 263
+             265:     64(int) ISub 264 206
+             266:      6(int) Bitcast 265
+             268:   146(bool) ULessThan 262 266
+                              SelectionMerge 270 None
+                              BranchConditional 268 269 270
+             269:               Label
+             271:      6(int)   Load 123(index)
+             272:      6(int)   IAdd 271 19
+             274:    201(ptr)   AccessChain 175 177 272 177
+             275:   62(fvec4)   Load 274
+             276:   26(fvec3)   VectorShuffle 275 275 0 1 2
+                                Store 273(param) 276
+             278:   26(fvec3)   Load 223(pos)
+                                Store 277(param) 278
+             280:     97(ptr)   AccessChain 93(params) 179
+             281:   23(float)   Load 280
+                                Store 279(param) 281
+             282:   26(fvec3)   FunctionCall 35(springForce(vf3;vf3;f1;) 273(param) 277(param) 279(param)
+             283:   26(fvec3)   Load 211(force)
+             284:   26(fvec3)   FAdd 283 282
+                                Store 211(force) 284
+                                Branch 270
+             270:             Label
+             285:    122(ptr) AccessChain 112(id) 19
+             286:      6(int) Load 285
+             287:    131(ptr) AccessChain 93(params) 130 19
+             288:     64(int) Load 287
+             289:     64(int) ISub 288 206
+             290:      6(int) Bitcast 289
+             292:   146(bool) ULessThan 286 290
+                              SelectionMerge 294 None
+                              BranchConditional 292 293 294
+             293:               Label
+             295:      6(int)   Load 123(index)
+             296:    131(ptr)   AccessChain 93(params) 130 11
+             297:     64(int)   Load 296
+             298:      6(int)   Bitcast 297
+             299:      6(int)   IAdd 295 298
+             302:    201(ptr)   AccessChain 175 177 299 177
+             303:   62(fvec4)   Load 302
+             304:   26(fvec3)   VectorShuffle 303 303 0 1 2
+                                Store 301(param) 304
+             306:   26(fvec3)   Load 223(pos)
+                                Store 305(param) 306
+             308:     97(ptr)   AccessChain 93(params) 300
+             309:   23(float)   Load 308
+                                Store 307(param) 309
+             310:   26(fvec3)   FunctionCall 35(springForce(vf3;vf3;f1;) 301(param) 305(param) 307(param)
+             311:   26(fvec3)   Load 211(force)
+             312:   26(fvec3)   FAdd 311 310
+                                Store 211(force) 312
+                                Branch 294
+             294:             Label
+             313:    122(ptr) AccessChain 112(id) 19
+             314:      6(int) Load 313
+             316:   146(bool) UGreaterThan 314 11
+                              SelectionMerge 318 None
+                              BranchConditional 316 317 318
+             317:               Label
+             319:      6(int)   Load 123(index)
+             320:    131(ptr)   AccessChain 93(params) 130 11
+             321:     64(int)   Load 320
+             322:      6(int)   Bitcast 321
+             323:      6(int)   ISub 319 322
+             325:    201(ptr)   AccessChain 175 177 323 177
+             326:   62(fvec4)   Load 325
+             327:   26(fvec3)   VectorShuffle 326 326 0 1 2
+                                Store 324(param) 327
+             329:   26(fvec3)   Load 223(pos)
+                                Store 328(param) 329
+             331:     97(ptr)   AccessChain 93(params) 300
+             332:   23(float)   Load 331
+                                Store 330(param) 332
+             333:   26(fvec3)   FunctionCall 35(springForce(vf3;vf3;f1;) 324(param) 328(param) 330(param)
+             334:   26(fvec3)   Load 211(force)
+             335:   26(fvec3)   FAdd 334 333
+                                Store 211(force) 335
+                                Branch 318
+             318:             Label
+             336:    122(ptr) AccessChain 112(id) 11
+             337:      6(int) Load 336
+             339:   146(bool) UGreaterThan 337 11
+                              SelectionMerge 341 None
+                              BranchConditional 339 340 341
+             340:               Label
+             342:    122(ptr)   AccessChain 112(id) 19
+             343:      6(int)   Load 342
+             344:    131(ptr)   AccessChain 93(params) 130 19
+             345:     64(int)   Load 344
+             346:     64(int)   ISub 345 206
+             347:      6(int)   Bitcast 346
+             349:   146(bool)   ULessThan 343 347
+                                Branch 341
+             341:             Label
+             350:   146(bool) Phi 339 318 349 340
+                              SelectionMerge 352 None
+                              BranchConditional 350 351 352
+             351:               Label
+             353:      6(int)   Load 123(index)
+             354:    131(ptr)   AccessChain 93(params) 130 11
+             355:     64(int)   Load 354
+             356:      6(int)   Bitcast 355
+             357:      6(int)   IAdd 353 356
+             358:      6(int)   ISub 357 19
+             361:    201(ptr)   AccessChain 175 177 358 177
+             362:   62(fvec4)   Load 361
+             363:   26(fvec3)   VectorShuffle 362 362 0 1 2
+                                Store 360(param) 363
+             365:   26(fvec3)   Load 223(pos)
+                                Store 364(param) 365
+             367:     97(ptr)   AccessChain 93(params) 359
+             368:   23(float)   Load 367
+                                Store 366(param) 368
+             369:   26(fvec3)   FunctionCall 35(springForce(vf3;vf3;f1;) 360(param) 364(param) 366(param)
+             370:   26(fvec3)   Load 211(force)
+             371:   26(fvec3)   FAdd 370 369
+                                Store 211(force) 371
+                                Branch 352
+             352:             Label
+             372:    122(ptr) AccessChain 112(id) 11
+             373:      6(int) Load 372
+             375:   146(bool) UGreaterThan 373 11
+                              SelectionMerge 377 None
+                              BranchConditional 375 376 377
+             376:               Label
+             378:    122(ptr)   AccessChain 112(id) 19
+             379:      6(int)   Load 378
+             381:   146(bool)   UGreaterThan 379 11
+                                Branch 377
+             377:             Label
+             382:   146(bool) Phi 375 352 381 376
+                              SelectionMerge 384 None
+                              BranchConditional 382 383 384
+             383:               Label
+             385:      6(int)   Load 123(index)
+             386:    131(ptr)   AccessChain 93(params) 130 11
+             387:     64(int)   Load 386
+             388:      6(int)   Bitcast 387
+             389:      6(int)   ISub 385 388
+             390:      6(int)   ISub 389 19
+             392:    201(ptr)   AccessChain 175 177 390 177
+             393:   62(fvec4)   Load 392
+             394:   26(fvec3)   VectorShuffle 393 393 0 1 2
+                                Store 391(param) 394
+             396:   26(fvec3)   Load 223(pos)
+                                Store 395(param) 396
+             398:     97(ptr)   AccessChain 93(params) 359
+             399:   23(float)   Load 398
+                                Store 397(param) 399
+             400:   26(fvec3)   FunctionCall 35(springForce(vf3;vf3;f1;) 391(param) 395(param) 397(param)
+             401:   26(fvec3)   Load 211(force)
+             402:   26(fvec3)   FAdd 401 400
+                                Store 211(force) 402
+                                Branch 384
+             384:             Label
+             403:    122(ptr) AccessChain 112(id) 11
+             404:      6(int) Load 403
+             405:    131(ptr) AccessChain 93(params) 130 11
+             406:     64(int) Load 405
+             407:     64(int) ISub 406 206
+             408:      6(int) Bitcast 407
+             410:   146(bool) ULessThan 404 408
+                              SelectionMerge 412 None
+                              BranchConditional 410 411 412
+             411:               Label
+             413:    122(ptr)   AccessChain 112(id) 19
+             414:      6(int)   Load 413
+             415:    131(ptr)   AccessChain 93(params) 130 19
+             416:     64(int)   Load 415
+             417:     64(int)   ISub 416 206
+             418:      6(int)   Bitcast 417
+             420:   146(bool)   ULessThan 414 418
+                                Branch 412
+             412:             Label
+             421:   146(bool) Phi 410 384 420 411
+                              SelectionMerge 423 None
+                              BranchConditional 421 422 423
+             422:               Label
+             424:      6(int)   Load 123(index)
+             425:    131(ptr)   AccessChain 93(params) 130 11
+             426:     64(int)   Load 425
+             427:      6(int)   Bitcast 426
+             428:      6(int)   IAdd 424 427
+             429:      6(int)   IAdd 428 19
+             431:    201(ptr)   AccessChain 175 177 429 177
+             432:   62(fvec4)   Load 431
+             433:   26(fvec3)   VectorShuffle 432 432 0 1 2
+                                Store 430(param) 433
+             435:   26(fvec3)   Load 223(pos)
+                                Store 434(param) 435
+             437:     97(ptr)   AccessChain 93(params) 359
+             438:   23(float)   Load 437
+                                Store 436(param) 438
+             439:   26(fvec3)   FunctionCall 35(springForce(vf3;vf3;f1;) 430(param) 434(param) 436(param)
+             440:   26(fvec3)   Load 211(force)
+             441:   26(fvec3)   FAdd 440 439
+                                Store 211(force) 441
+                                Branch 423
+             423:             Label
+             442:    122(ptr) AccessChain 112(id) 11
+             443:      6(int) Load 442
+             444:    131(ptr) AccessChain 93(params) 130 11
+             445:     64(int) Load 444
+             446:     64(int) ISub 445 206
+             447:      6(int) Bitcast 446
+             449:   146(bool) ULessThan 443 447
+                              SelectionMerge 451 None
+                              BranchConditional 449 450 451
+             450:               Label
+             452:    122(ptr)   AccessChain 112(id) 19
+             453:      6(int)   Load 452
+             455:   146(bool)   UGreaterThan 453 11
+                                Branch 451
+             451:             Label
+             456:   146(bool) Phi 449 423 455 450
+                              SelectionMerge 458 None
+                              BranchConditional 456 457 458
+             457:               Label
+             459:      6(int)   Load 123(index)
+             460:    131(ptr)   AccessChain 93(params) 130 11
+             461:     64(int)   Load 460
+             462:      6(int)   Bitcast 461
+             463:      6(int)   ISub 459 462
+             464:      6(int)   IAdd 463 19
+             466:    201(ptr)   AccessChain 175 177 464 177
+             467:   62(fvec4)   Load 466
+             468:   26(fvec3)   VectorShuffle 467 467 0 1 2
+                                Store 465(param) 468
+             470:   26(fvec3)   Load 223(pos)
+                                Store 469(param) 470
+             472:     97(ptr)   AccessChain 93(params) 359
+             473:   23(float)   Load 472
+                                Store 471(param) 473
+             474:   26(fvec3)   FunctionCall 35(springForce(vf3;vf3;f1;) 465(param) 469(param) 471(param)
+             475:   26(fvec3)   Load 211(force)
+             476:   26(fvec3)   FAdd 475 474
+                                Store 211(force) 476
+                                Branch 458
+             458:             Label
+             478:     97(ptr) AccessChain 93(params) 477
+             479:   23(float) Load 478
+             480:   23(float) FNegate 479
+             481:   26(fvec3) Load 232(vel)
+             482:   26(fvec3) VectorTimesScalar 481 480
+             483:   26(fvec3) Load 211(force)
+             484:   26(fvec3) FAdd 483 482
+                              Store 211(force) 484
+             489:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 486 485(f) 44
+             490:   26(fvec3) Load 211(force)
+             491:     97(ptr) AccessChain 93(params) 206
+             492:   23(float) Load 491
+             493:   23(float) FDiv 182 492
+             494:   26(fvec3) VectorTimesScalar 490 493
+                              Store 485(f) 494
+             495:      6(int) Load 123(index)
+             496:   26(fvec3) Load 223(pos)
+             497:   26(fvec3) Load 232(vel)
+             498:     97(ptr) AccessChain 93(params) 177
+             499:   23(float) Load 498
+             500:   26(fvec3) VectorTimesScalar 497 499
+             501:   26(fvec3) FAdd 496 500
+             503:   26(fvec3) Load 485(f)
+             504:   26(fvec3) VectorTimesScalar 503 502
+             505:     97(ptr) AccessChain 93(params) 177
+             506:   23(float) Load 505
+             507:   26(fvec3) VectorTimesScalar 504 506
+             508:     97(ptr) AccessChain 93(params) 177
+             509:   23(float) Load 508
+             510:   26(fvec3) VectorTimesScalar 507 509
+             511:   26(fvec3) FAdd 501 510
+             512:   23(float) CompositeExtract 511 0
+             513:   23(float) CompositeExtract 511 1
+             514:   23(float) CompositeExtract 511 2
+             515:   62(fvec4) CompositeConstruct 512 513 514 182
+             516:    201(ptr) AccessChain 197 177 495 177
+                              Store 516 515
+             517:      6(int) Load 123(index)
+             518:   26(fvec3) Load 232(vel)
+             519:   26(fvec3) Load 485(f)
+             520:     97(ptr) AccessChain 93(params) 177
+             521:   23(float) Load 520
+             522:   26(fvec3) VectorTimesScalar 519 521
+             523:   26(fvec3) FAdd 518 522
+             524:   23(float) CompositeExtract 523 0
+             525:   23(float) CompositeExtract 523 1
+             526:   23(float) CompositeExtract 523 2
+             527:   62(fvec4) CompositeConstruct 524 525 526 207
+             528:    201(ptr) AccessChain 197 177 517 206
+                              Store 528 527
+             533:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 530 529(sphereDist) 44
+             534:      6(int) Load 123(index)
+             535:    201(ptr) AccessChain 197 177 534 177
+             536:   62(fvec4) Load 535
+             537:   26(fvec3) VectorShuffle 536 536 0 1 2
+             539:    201(ptr) AccessChain 93(params) 538
+             540:   62(fvec4) Load 539
+             541:   26(fvec3) VectorShuffle 540 540 0 1 2
+             542:   26(fvec3) FSub 537 541
+                              Store 529(sphereDist) 542
+             543:   26(fvec3) Load 529(sphereDist)
+             544:   23(float) ExtInst 2(GLSL.std.450) 66(Length) 543
+             546:     97(ptr) AccessChain 93(params) 545
+             547:   23(float) Load 546
+             549:   23(float) FAdd 547 548
+             551:   146(bool) FOrdLessThan 544 549
+                              SelectionMerge 553 None
+                              BranchConditional 551 552 553
+             552:               Label
+             554:      6(int)   Load 123(index)
+             555:    201(ptr)   AccessChain 93(params) 538
+             556:   62(fvec4)   Load 555
+             557:   26(fvec3)   VectorShuffle 556 556 0 1 2
+             558:   26(fvec3)   Load 529(sphereDist)
+             559:   26(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 558
+             560:     97(ptr)   AccessChain 93(params) 545
+             561:   23(float)   Load 560
+             562:   23(float)   FAdd 561 548
+             563:   26(fvec3)   VectorTimesScalar 559 562
+             564:   26(fvec3)   FAdd 557 563
+             565:     97(ptr)   AccessChain 197 177 554 177 11
+             566:   23(float)   CompositeExtract 564 0
+                                Store 565 566
+             567:     97(ptr)   AccessChain 197 177 554 177 19
+             568:   23(float)   CompositeExtract 564 1
+                                Store 567 568
+             569:     97(ptr)   AccessChain 197 177 554 177 21
+             570:   23(float)   CompositeExtract 564 2
+                                Store 569 570
+             571:      6(int)   Load 123(index)
+             572:    201(ptr)   AccessChain 197 177 571 206
+                                Store 572 208
+                                Branch 553
+             553:             Label
+             585:    584(ptr) AccessChain 581(pushConsts) 177
+             586:      6(int) Load 585
+             588:   146(bool) IEqual 586 19
+                              SelectionMerge 590 None
+                              BranchConditional 588 589 590
+             589:               Label
+             594:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 592 591(normal) 44
+                                Store 591(normal) 595
+             596:    122(ptr)   AccessChain 112(id) 19
+             597:      6(int)   Load 596
+             599:   146(bool)   UGreaterThan 597 11
+                                SelectionMerge 601 None
+                                BranchConditional 599 600 601
+             600:                 Label
+             602:    122(ptr)     AccessChain 112(id) 11
+             603:      6(int)     Load 602
+             605:   146(bool)     UGreaterThan 603 11
+                                  SelectionMerge 607 None
+                                  BranchConditional 605 606 607
+             606:                   Label
+             612:           3       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 609 608(a) 44
+             613:      6(int)       Load 123(index)
+             614:      6(int)       ISub 613 19
+             615:    201(ptr)       AccessChain 175 177 614 177
+             616:   62(fvec4)       Load 615
+             617:   26(fvec3)       VectorShuffle 616 616 0 1 2
+             618:   26(fvec3)       Load 223(pos)
+             619:   26(fvec3)       FSub 617 618
+                                    Store 608(a) 619
+             624:           3       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 621 620(b) 44
+             625:      6(int)       Load 123(index)
+             626:    131(ptr)       AccessChain 93(params) 130 11
+             627:     64(int)       Load 626
+             628:      6(int)       Bitcast 627
+             629:      6(int)       ISub 625 628
+             630:      6(int)       ISub 629 19
+             631:    201(ptr)       AccessChain 175 177 630 177
+             632:   62(fvec4)       Load 631
+             633:   26(fvec3)       VectorShuffle 632 632 0 1 2
+             634:   26(fvec3)       Load 223(pos)
+             635:   26(fvec3)       FSub 633 634
+                                    Store 620(b) 635
+             640:           3       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 637 636(c) 44
+             641:      6(int)       Load 123(index)
+             642:    131(ptr)       AccessChain 93(params) 130 11
+             643:     64(int)       Load 642
+             644:      6(int)       Bitcast 643
+             645:      6(int)       ISub 641 644
+             646:    201(ptr)       AccessChain 175 177 645 177
+             647:   62(fvec4)       Load 646
+             648:   26(fvec3)       VectorShuffle 647 647 0 1 2
+             649:   26(fvec3)       Load 223(pos)
+             650:   26(fvec3)       FSub 648 649
+                                    Store 636(c) 650
+             651:   26(fvec3)       Load 608(a)
+             652:   26(fvec3)       Load 620(b)
+             653:   26(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 651 652
+             654:   26(fvec3)       Load 620(b)
+             655:   26(fvec3)       Load 636(c)
+             656:   26(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 654 655
+             657:   26(fvec3)       FAdd 653 656
+             658:   26(fvec3)       Load 591(normal)
+             659:   26(fvec3)       FAdd 658 657
+                                    Store 591(normal) 659
+                                    Branch 607
+             607:                 Label
+             660:    122(ptr)     AccessChain 112(id) 11
+             661:      6(int)     Load 660
+             662:    131(ptr)     AccessChain 93(params) 130 11
+             663:     64(int)     Load 662
+             664:     64(int)     ISub 663 206
+             665:      6(int)     Bitcast 664
+             667:   146(bool)     ULessThan 661 665
+                                  SelectionMerge 669 None
+                                  BranchConditional 667 668 669
+             668:                   Label
+             670:      6(int)       Load 123(index)
+             671:    131(ptr)       AccessChain 93(params) 130 11
+             672:     64(int)       Load 671
+             673:      6(int)       Bitcast 672
+             674:      6(int)       ISub 670 673
+             675:    201(ptr)       AccessChain 175 177 674 177
+             676:   62(fvec4)       Load 675
+             677:   26(fvec3)       VectorShuffle 676 676 0 1 2
+             678:   26(fvec3)       Load 223(pos)
+             679:   26(fvec3)       FSub 677 678
+                                    Store 608(a) 679
+             680:      6(int)       Load 123(index)
+             681:    131(ptr)       AccessChain 93(params) 130 11
+             682:     64(int)       Load 681
+             683:      6(int)       Bitcast 682
+             684:      6(int)       ISub 680 683
+             685:      6(int)       IAdd 684 19
+             686:    201(ptr)       AccessChain 175 177 685 177
+             687:   62(fvec4)       Load 686
+             688:   26(fvec3)       VectorShuffle 687 687 0 1 2
+             689:   26(fvec3)       Load 223(pos)
+             690:   26(fvec3)       FSub 688 689
+                                    Store 620(b) 690
+             691:      6(int)       Load 123(index)
+             692:      6(int)       IAdd 691 19
+             693:    201(ptr)       AccessChain 175 177 692 177
+             694:   62(fvec4)       Load 693
+             695:   26(fvec3)       VectorShuffle 694 694 0 1 2
+             696:   26(fvec3)       Load 223(pos)
+             697:   26(fvec3)       FSub 695 696
+                                    Store 636(c) 697
+             698:   26(fvec3)       Load 608(a)
+             699:   26(fvec3)       Load 620(b)
+             700:   26(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 698 699
+             701:   26(fvec3)       Load 620(b)
+             702:   26(fvec3)       Load 636(c)
+             703:   26(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 701 702
+             704:   26(fvec3)       FAdd 700 703
+             705:   26(fvec3)       Load 591(normal)
+             706:   26(fvec3)       FAdd 705 704
+                                    Store 591(normal) 706
+                                    Branch 669
+             669:                 Label
+                                  Branch 601
+             601:               Label
+             707:    122(ptr)   AccessChain 112(id) 19
+             708:      6(int)   Load 707
+             709:    131(ptr)   AccessChain 93(params) 130 19
+             710:     64(int)   Load 709
+             711:     64(int)   ISub 710 206
+             712:      6(int)   Bitcast 711
+             714:   146(bool)   ULessThan 708 712
+                                SelectionMerge 716 None
+                                BranchConditional 714 715 716
+             715:                 Label
+             717:    122(ptr)     AccessChain 112(id) 11
+             718:      6(int)     Load 717
+             720:   146(bool)     UGreaterThan 718 11
+                                  SelectionMerge 722 None
+                                  BranchConditional 720 721 722
+             721:                   Label
+             723:      6(int)       Load 123(index)
+             724:    131(ptr)       AccessChain 93(params) 130 11
+             725:     64(int)       Load 724
+             726:      6(int)       Bitcast 725
+             727:      6(int)       IAdd 723 726
+             728:    201(ptr)       AccessChain 175 177 727 177
+             729:   62(fvec4)       Load 728
+             730:   26(fvec3)       VectorShuffle 729 729 0 1 2
+             731:   26(fvec3)       Load 223(pos)
+             732:   26(fvec3)       FSub 730 731
+                                    Store 608(a) 732
+             733:      6(int)       Load 123(index)
+             734:    131(ptr)       AccessChain 93(params) 130 11
+             735:     64(int)       Load 734
+             736:      6(int)       Bitcast 735
+             737:      6(int)       IAdd 733 736
+             738:      6(int)       ISub 737 19
+             739:    201(ptr)       AccessChain 175 177 738 177
+             740:   62(fvec4)       Load 739
+             741:   26(fvec3)       VectorShuffle 740 740 0 1 2
+             742:   26(fvec3)       Load 223(pos)
+             743:   26(fvec3)       FSub 741 742
+                                    Store 620(b) 743
+             744:      6(int)       Load 123(index)
+             745:      6(int)       ISub 744 19
+             746:    201(ptr)       AccessChain 175 177 745 177
+             747:   62(fvec4)       Load 746
+             748:   26(fvec3)       VectorShuffle 747 747 0 1 2
+             749:   26(fvec3)       Load 223(pos)
+             750:   26(fvec3)       FSub 748 749
+                                    Store 636(c) 750
+             751:   26(fvec3)       Load 608(a)
+             752:   26(fvec3)       Load 620(b)
+             753:   26(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 751 752
+             754:   26(fvec3)       Load 620(b)
+             755:   26(fvec3)       Load 636(c)
+             756:   26(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 754 755
+             757:   26(fvec3)       FAdd 753 756
+             758:   26(fvec3)       Load 591(normal)
+             759:   26(fvec3)       FAdd 758 757
+                                    Store 591(normal) 759
+                                    Branch 722
+             722:                 Label
+             760:    122(ptr)     AccessChain 112(id) 11
+             761:      6(int)     Load 760
+             762:    131(ptr)     AccessChain 93(params) 130 11
+             763:     64(int)     Load 762
+             764:     64(int)     ISub 763 206
+             765:      6(int)     Bitcast 764
+             767:   146(bool)     ULessThan 761 765
+                                  SelectionMerge 769 None
+                                  BranchConditional 767 768 769
+             768:                   Label
+             770:      6(int)       Load 123(index)
+             771:      6(int)       IAdd 770 19
+             772:    201(ptr)       AccessChain 175 177 771 177
+             773:   62(fvec4)       Load 772
+             774:   26(fvec3)       VectorShuffle 773 773 0 1 2
+             775:   26(fvec3)       Load 223(pos)
+             776:   26(fvec3)       FSub 774 775
+                                    Store 608(a) 776
+             777:      6(int)       Load 123(index)
+             778:    131(ptr)       AccessChain 93(params) 130 11
+             779:     64(int)       Load 778
+             780:      6(int)       Bitcast 779
+             781:      6(int)       IAdd 777 780
+             782:      6(int)       IAdd 781 19
+             783:    201(ptr)       AccessChain 175 177 782 177
+             784:   62(fvec4)       Load 783
+             785:   26(fvec3)       VectorShuffle 784 784 0 1 2
+             786:   26(fvec3)       Load 223(pos)
+             787:   26(fvec3)       FSub 785 786
+                                    Store 620(b) 787
+             788:      6(int)       Load 123(index)
+             789:    131(ptr)       AccessChain 93(params) 130 11
+             790:     64(int)       Load 789
+             791:      6(int)       Bitcast 790
+             792:      6(int)       IAdd 788 791
+             793:    201(ptr)       AccessChain 175 177 792 177
+             794:   62(fvec4)       Load 793
+             795:   26(fvec3)       VectorShuffle 794 794 0 1 2
+             796:   26(fvec3)       Load 223(pos)
+             797:   26(fvec3)       FSub 795 796
+                                    Store 636(c) 797
+             798:   26(fvec3)       Load 608(a)
+             799:   26(fvec3)       Load 620(b)
+             800:   26(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 798 799
+             801:   26(fvec3)       Load 620(b)
+             802:   26(fvec3)       Load 636(c)
+             803:   26(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 801 802
+             804:   26(fvec3)       FAdd 800 803
+             805:   26(fvec3)       Load 591(normal)
+             806:   26(fvec3)       FAdd 805 804
+                                    Store 591(normal) 806
+                                    Branch 769
+             769:                 Label
+                                  Branch 716
+             716:               Label
+             807:      6(int)   Load 123(index)
+             808:   26(fvec3)   Load 591(normal)
+             809:   26(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 808
+             810:   23(float)   CompositeExtract 809 0
+             811:   23(float)   CompositeExtract 809 1
+             812:   23(float)   CompositeExtract 809 2
+             813:   62(fvec4)   CompositeConstruct 810 811 812 207
+             814:    201(ptr)   AccessChain 197 177 807 477
+                                Store 814 813
+                                Branch 590
+             590:             Label
+                              Return
+                              FunctionEnd
+35(springForce(vf3;vf3;f1;):   26(fvec3) Function None 30
+          32(p0):     28(ptr) FunctionParameter
+          33(p1):     28(ptr) FunctionParameter
+    34(restDist):     29(ptr) FunctionParameter
+              38:             Label
+        52(dist):     28(ptr) Variable Function
+              39:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 37
+              40:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 16 11 11 11 11
+              43:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 41 32(p0) 44
+              47:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 45 33(p1) 44
+              50:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 48 34(restDist) 44
+              51:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 37 35(springForce(vf3;vf3;f1;)
+              56:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 53 52(dist) 44
+              57:   26(fvec3) Load 32(p0)
+              58:   26(fvec3) Load 33(p1)
+              59:   26(fvec3) FSub 57 58
+                              Store 52(dist) 59
+              60:   26(fvec3) Load 52(dist)
+              61:   26(fvec3) ExtInst 2(GLSL.std.450) 69(Normalize) 60
+              98:     97(ptr) AccessChain 93(params) 96
+              99:   23(float) Load 98
+             100:   26(fvec3) VectorTimesScalar 61 99
+             101:   26(fvec3) Load 52(dist)
+             102:   23(float) ExtInst 2(GLSL.std.450) 66(Length) 101
+             103:   23(float) Load 34(restDist)
+             104:   23(float) FSub 102 103
+             105:   26(fvec3) VectorTimesScalar 100 104
+                              ReturnValue 105
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.frag.out b/Test/baseResults/spv.debuginfo.glsl.frag.out
new file mode 100644
index 0000000..22b1731
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.glsl.frag.out
@@ -0,0 +1,937 @@
+spv.debuginfo.glsl.frag
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 704
+
+                              Capability Shader
+                              Capability ImageQuery
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 13  "main" 400 445
+                              ExecutionMode 13 OriginUpperLeft
+               8:             String  "uint"
+              14:             String  "main"
+              17:             String  ""
+              24:             String  "float"
+              39:             String  "textureProj"
+              45:             String  "P"
+              49:             String  "layer"
+              52:             String  "offset"
+              59:             String  "filterPCF"
+              65:             String  "sc"
+              77:             String  "shadow"
+              83:             String  "fragcolor"
+              86:             String  "fragpos"
+              96:             String  "shadowCoord"
+             118:             String  "bool"
+             132:             String  "dist"
+             137:             String  "type.2d.image"
+             138:             String  "@type.2d.image"
+             142:             String  "type.sampled.image"
+             143:             String  "@type.sampled.image"
+             147:             String  "samplerShadowMap"
+             181:             String  "int"
+             188:             String  "texDim"
+             200:             String  "scale"
+             206:             String  "dx"
+             218:             String  "dy"
+             229:             String  "shadowFactor"
+             234:             String  "count"
+             239:             String  "range"
+             245:             String  "x"
+             261:             String  "y"
+             307:             String  "i"
+             321:             String  "shadowClip"
+             329:             String  "color"
+             335:             String  "viewMatrix"
+             338:             String  "Light"
+             344:             String  "lights"
+             347:             String  "debugDisplayTarget"
+             351:             String  "UBO"
+             355:             String  "ubo"
+             387:             String  "fragPos"
+             397:             String  "samplerposition"
+             402:             String  "inUV"
+             408:             String  "normal"
+             413:             String  "samplerNormal"
+             420:             String  "albedo"
+             425:             String  "samplerAlbedo"
+             447:             String  "outFragColor"
+             509:             String  "N"
+             528:             String  "L"
+             548:             String  "V"
+             560:             String  "lightCosInnerAngle"
+             566:             String  "lightCosOuterAngle"
+             572:             String  "lightRange"
+             578:             String  "dir"
+             593:             String  "cosDir"
+             601:             String  "spotEffect"
+             610:             String  "heightAttenuation"
+             618:             String  "NdotL"
+             627:             String  "diff"
+             634:             String  "R"
+             643:             String  "NdotR"
+             652:             String  "spec"
+                              Name 13  "main"
+                              Name 38  "textureProj(vf4;f1;vf2;"
+                              Name 35  "P"
+                              Name 36  "layer"
+                              Name 37  "offset"
+                              Name 58  "filterPCF(vf4;f1;"
+                              Name 56  "sc"
+                              Name 57  "layer"
+                              Name 76  "shadow(vf3;vf3;"
+                              Name 74  "fragcolor"
+                              Name 75  "fragpos"
+                              Name 89  "shadow"
+                              Name 94  "shadowCoord"
+                              Name 130  "dist"
+                              Name 145  "samplerShadowMap"
+                              Name 186  "texDim"
+                              Name 198  "scale"
+                              Name 204  "dx"
+                              Name 216  "dy"
+                              Name 227  "shadowFactor"
+                              Name 232  "count"
+                              Name 237  "range"
+                              Name 243  "x"
+                              Name 259  "y"
+                              Name 284  "param"
+                              Name 286  "param"
+                              Name 288  "param"
+                              Name 305  "i"
+                              Name 319  "shadowClip"
+                              Name 327  "Light"
+                              MemberName 327(Light) 0  "position"
+                              MemberName 327(Light) 1  "target"
+                              MemberName 327(Light) 2  "color"
+                              MemberName 327(Light) 3  "viewMatrix"
+                              Name 341  "UBO"
+                              MemberName 341(UBO) 0  "viewPos"
+                              MemberName 341(UBO) 1  "lights"
+                              MemberName 341(UBO) 2  "useShadows"
+                              MemberName 341(UBO) 3  "debugDisplayTarget"
+                              Name 353  "ubo"
+                              Name 366  "shadowFactor"
+                              Name 372  "param"
+                              Name 374  "param"
+                              Name 385  "fragPos"
+                              Name 395  "samplerposition"
+                              Name 400  "inUV"
+                              Name 406  "normal"
+                              Name 411  "samplerNormal"
+                              Name 418  "albedo"
+                              Name 423  "samplerAlbedo"
+                              Name 445  "outFragColor"
+                              Name 450  "param"
+                              Name 451  "param"
+                              Name 499  "fragcolor"
+                              Name 507  "N"
+                              Name 514  "i"
+                              Name 526  "L"
+                              Name 538  "dist"
+                              Name 546  "V"
+                              Name 558  "lightCosInnerAngle"
+                              Name 564  "lightCosOuterAngle"
+                              Name 570  "lightRange"
+                              Name 576  "dir"
+                              Name 591  "cosDir"
+                              Name 599  "spotEffect"
+                              Name 608  "heightAttenuation"
+                              Name 616  "NdotL"
+                              Name 625  "diff"
+                              Name 632  "R"
+                              Name 641  "NdotR"
+                              Name 650  "spec"
+                              Name 694  "param"
+                              Name 696  "param"
+                              Decorate 145(samplerShadowMap) DescriptorSet 0
+                              Decorate 145(samplerShadowMap) Binding 5
+                              MemberDecorate 327(Light) 0 Offset 0
+                              MemberDecorate 327(Light) 1 Offset 16
+                              MemberDecorate 327(Light) 2 Offset 32
+                              MemberDecorate 327(Light) 3 ColMajor
+                              MemberDecorate 327(Light) 3 Offset 48
+                              MemberDecorate 327(Light) 3 MatrixStride 16
+                              Decorate 339 ArrayStride 112
+                              MemberDecorate 341(UBO) 0 Offset 0
+                              MemberDecorate 341(UBO) 1 Offset 16
+                              MemberDecorate 341(UBO) 2 Offset 352
+                              MemberDecorate 341(UBO) 3 Offset 356
+                              Decorate 341(UBO) Block
+                              Decorate 353(ubo) DescriptorSet 0
+                              Decorate 353(ubo) Binding 4
+                              Decorate 395(samplerposition) DescriptorSet 0
+                              Decorate 395(samplerposition) Binding 1
+                              Decorate 400(inUV) Location 0
+                              Decorate 411(samplerNormal) DescriptorSet 0
+                              Decorate 411(samplerNormal) Binding 2
+                              Decorate 423(samplerAlbedo) DescriptorSet 0
+                              Decorate 423(samplerAlbedo) Binding 3
+                              Decorate 445(outFragColor) Location 0
+               3:             TypeVoid
+               4:             TypeFunction 3
+               6:             TypeInt 32 0
+               9:      6(int) Constant 32
+              10:      6(int) Constant 6
+              11:      6(int) Constant 0
+               7:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 8 9 10 11
+              12:      6(int) Constant 3
+               5:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 3
+              16:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 17
+              19:      6(int) Constant 1
+              20:      6(int) Constant 4
+              21:      6(int) Constant 2
+              18:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 19 20 16 21
+              15:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 14 5 16 11 11 18 14 12 11
+              23:             TypeFloat 32
+              25:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 24 9 12 11
+              26:             TypeVector 23(float) 4
+              27:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 20
+              28:             TypePointer Function 26(fvec4)
+              29:             TypePointer Function 23(float)
+              30:             TypeVector 23(float) 2
+              31:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 21
+              32:             TypePointer Function 30(fvec2)
+              33:             TypeFunction 23(float) 28(ptr) 29(ptr) 32(ptr)
+              34:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 25 27 25 31
+              40:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 39 34 16 11 11 18 39 12 11
+              44:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 45 27 16 11 11 40 20 19
+              47:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              48:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 49 25 16 11 11 40 20 21
+              51:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 52 31 16 11 11 40 20 12
+              54:             TypeFunction 23(float) 28(ptr) 29(ptr)
+              55:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 25 27 25
+              60:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 59 55 16 11 11 18 59 12 11
+              64:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 65 27 16 11 11 60 20 19
+              67:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 49 25 16 11 11 60 20 21
+              69:             TypeVector 23(float) 3
+              70:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 12
+              71:             TypePointer Function 69(fvec3)
+              72:             TypeFunction 69(fvec3) 71(ptr) 71(ptr)
+              73:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 70 70 70
+              78:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 77 73 16 11 11 18 77 12 11
+              82:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 83 70 16 11 11 78 20 19
+              85:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 86 70 16 11 11 78 20 21
+              91:      6(int) Constant 59
+              90:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 77 25 16 91 11 40 20
+              93:   23(float) Constant 1065353216
+              97:      6(int) Constant 60
+              95:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 96 27 16 97 11 40 20
+             106:   23(float) Constant 1056964608
+             114:             TypeBool
+             117:   23(float) Constant 3212836864
+             119:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+             125:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+             133:      6(int) Constant 65
+             131:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 132 25 16 133 11 40 20
+             135:             TypeImage 23(float) 2D array sampled format:Unknown
+             139:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(Unknown)
+             136:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 137 11 16 133 11 18 138 139 12
+             140:             TypeSampledImage 135
+             141:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 142 11 16 133 11 18 143 139 12
+             144:             TypePointer UniformConstant 140
+145(samplerShadowMap):    144(ptr) Variable UniformConstant
+             148:      6(int) Constant 8
+             146:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 147 141 16 133 11 18 147 145(samplerShadowMap) 148
+             162:   23(float) Constant 0
+             163:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+             170:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+             175:   23(float) Constant 1048576000
+             180:             TypeInt 32 1
+             182:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 181 9 20 11
+             183:             TypeVector 180(int) 2
+             184:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 182 21
+             185:             TypePointer Function 183(ivec2)
+             189:      6(int) Constant 76
+             187:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 188 184 16 189 11 60 20
+             192:    180(int) Constant 0
+             194:             TypeVector 180(int) 3
+             195:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 182 12
+             201:      6(int) Constant 77
+             199:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 200 25 16 201 11 60 20
+             203:   23(float) Constant 1069547520
+             207:      6(int) Constant 78
+             205:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 206 25 16 207 11 60 20
+             211:             TypePointer Function 180(int)
+             219:      6(int) Constant 79
+             217:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 218 25 16 219 11 60 20
+             230:      6(int) Constant 81
+             228:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 229 25 16 230 11 60 20
+             235:      6(int) Constant 82
+             233:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 234 182 16 235 11 60 20
+             240:      6(int) Constant 83
+             238:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 239 182 16 240 11 60 20
+             242:    180(int) Constant 1
+             246:      6(int) Constant 85
+             244:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 245 182 16 246 11 60 20
+             257:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+             262:      6(int) Constant 87
+             260:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 261 182 16 262 11 60 20
+             273:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+             308:      6(int) Constant 98
+             306:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 307 182 16 308 11 78 20
+             316:    180(int) Constant 3
+             317:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+             322:      6(int) Constant 100
+             320:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 321 27 16 322 11 78 20
+             324:             TypeMatrix 26(fvec4) 4
+             326:   114(bool) ConstantTrue
+             325:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 27 20 326
+      327(Light):             TypeStruct 26(fvec4) 26(fvec4) 26(fvec4) 324
+             330:      6(int) Constant 45
+             331:      6(int) Constant 7
+             328:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 329 27 16 330 331 11 11 12
+             332:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 329 27 16 330 331 11 11 12
+             333:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 329 27 16 330 331 11 11 12
+             336:      6(int) Constant 46
+             334:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 335 325 16 336 331 11 11 12
+             337:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 338 19 16 322 11 18 338 11 12 328 332 333 334
+             339:             TypeArray 327(Light) 12
+             340:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 337 12
+        341(UBO):             TypeStruct 26(fvec4) 339 180(int) 180(int)
+             342:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 329 27 16 330 331 11 11 12
+             345:      6(int) Constant 52
+             343:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 344 340 16 345 148 11 11 12
+             348:      6(int) Constant 54
+             346:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 347 182 16 348 10 11 11 12
+             349:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 347 182 16 348 10 11 11 12
+             350:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 351 19 16 322 11 18 351 11 12 342 343 346 349
+             352:             TypePointer Uniform 341(UBO)
+        353(ubo):    352(ptr) Variable Uniform
+             354:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 355 350 16 322 11 18 355 353(ubo) 148
+             357:             TypePointer Uniform 324
+             368:      6(int) Constant 104
+             367:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 229 25 16 368 11 78 20
+             388:      6(int) Constant 117
+             386:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 387 70 16 388 11 15 20
+             390:             TypeImage 23(float) 2D sampled format:Unknown
+             391:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 137 11 16 388 11 18 138 139 12
+             392:             TypeSampledImage 390
+             393:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 142 11 16 388 11 18 143 139 12
+             394:             TypePointer UniformConstant 392
+395(samplerposition):    394(ptr) Variable UniformConstant
+             396:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 397 393 16 388 11 18 397 395(samplerposition) 148
+             399:             TypePointer Input 30(fvec2)
+       400(inUV):    399(ptr) Variable Input
+             401:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 402 31 16 388 11 18 402 400(inUV) 148
+             409:      6(int) Constant 118
+             407:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 408 70 16 409 11 15 20
+411(samplerNormal):    394(ptr) Variable UniformConstant
+             412:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 413 393 16 409 11 18 413 411(samplerNormal) 148
+             421:      6(int) Constant 119
+             419:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 420 27 16 421 11 15 20
+423(samplerAlbedo):    394(ptr) Variable UniformConstant
+             424:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 425 393 16 421 11 18 425 423(samplerAlbedo) 148
+             429:             TypePointer Uniform 180(int)
+             432:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+             444:             TypePointer Output 26(fvec4)
+445(outFragColor):    444(ptr) Variable Output
+             448:      6(int) Constant 125
+             446:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 447 27 16 448 11 18 447 445(outFragColor) 148
+             449:   69(fvec3) ConstantComposite 93 93 93
+             454:             TypePointer Output 23(float)
+             501:      6(int) Constant 145
+             500:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 83 70 16 501 11 15 20
+             505:   23(float) Constant 1036831949
+             510:      6(int) Constant 147
+             508:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 509 70 16 510 11 15 20
+             516:      6(int) Constant 149
+             515:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 307 182 16 516 11 15 20
+             524:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+             529:      6(int) Constant 152
+             527:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 528 70 16 529 11 15 20
+             532:             TypePointer Uniform 26(fvec4)
+             540:      6(int) Constant 154
+             539:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 132 25 16 540 11 15 20
+             549:      6(int) Constant 158
+             547:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 548 70 16 549 11 15 20
+             561:      6(int) Constant 161
+             559:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 560 25 16 561 11 15 20
+             563:   23(float) Constant 1064781546
+             567:      6(int) Constant 162
+             565:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 566 25 16 567 11 15 20
+             569:   23(float) Constant 1063781322
+             573:      6(int) Constant 163
+             571:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 572 25 16 573 11 15 20
+             575:   23(float) Constant 1120403456
+             579:      6(int) Constant 166
+             577:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 578 70 16 579 11 15 20
+             594:      6(int) Constant 169
+             592:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 593 25 16 594 11 15 20
+             602:      6(int) Constant 170
+             600:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 601 25 16 602 11 15 20
+             611:      6(int) Constant 171
+             609:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 610 25 16 611 11 15 20
+             619:      6(int) Constant 174
+             617:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 618 25 16 619 11 15 20
+             628:      6(int) Constant 175
+             626:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 627 70 16 628 11 15 20
+             635:      6(int) Constant 178
+             633:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 634 70 16 635 11 15 20
+             644:      6(int) Constant 179
+             642:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 643 25 16 644 11 15 20
+             653:      6(int) Constant 180
+             651:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 652 70 16 653 11 15 20
+             656:   23(float) Constant 1098907648
+             661:   23(float) Constant 1075838976
+             676:    180(int) Constant 2
+             690:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 118 9 21 11
+        13(main):           3 Function None 4
+              22:             Label
+    385(fragPos):     71(ptr) Variable Function
+     406(normal):     71(ptr) Variable Function
+     418(albedo):     28(ptr) Variable Function
+      450(param):     71(ptr) Variable Function
+      451(param):     71(ptr) Variable Function
+  499(fragcolor):     71(ptr) Variable Function
+          507(N):     71(ptr) Variable Function
+          514(i):    211(ptr) Variable Function
+          526(L):     71(ptr) Variable Function
+       538(dist):     29(ptr) Variable Function
+          546(V):     71(ptr) Variable Function
+558(lightCosInnerAngle):     29(ptr) Variable Function
+564(lightCosOuterAngle):     29(ptr) Variable Function
+ 570(lightRange):     29(ptr) Variable Function
+        576(dir):     71(ptr) Variable Function
+     591(cosDir):     29(ptr) Variable Function
+ 599(spotEffect):     29(ptr) Variable Function
+608(heightAttenuation):     29(ptr) Variable Function
+      616(NdotL):     29(ptr) Variable Function
+       625(diff):     71(ptr) Variable Function
+          632(R):     71(ptr) Variable Function
+      641(NdotR):     29(ptr) Variable Function
+       650(spec):     71(ptr) Variable Function
+      694(param):     71(ptr) Variable Function
+      696(param):     71(ptr) Variable Function
+             384:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 15 13(main)
+             389:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 386 385(fragPos) 47
+             398:         392 Load 395(samplerposition)
+             403:   30(fvec2) Load 400(inUV)
+             404:   26(fvec4) ImageSampleImplicitLod 398 403
+             405:   69(fvec3) VectorShuffle 404 404 0 1 2
+                              Store 385(fragPos) 405
+             410:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 407 406(normal) 47
+             414:         392 Load 411(samplerNormal)
+             415:   30(fvec2) Load 400(inUV)
+             416:   26(fvec4) ImageSampleImplicitLod 414 415
+             417:   69(fvec3) VectorShuffle 416 416 0 1 2
+                              Store 406(normal) 417
+             422:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 419 418(albedo) 47
+             426:         392 Load 423(samplerAlbedo)
+             427:   30(fvec2) Load 400(inUV)
+             428:   26(fvec4) ImageSampleImplicitLod 426 427
+                              Store 418(albedo) 428
+             430:    429(ptr) AccessChain 353(ubo) 316
+             431:    180(int) Load 430
+             433:   114(bool) SGreaterThan 431 192
+                              SelectionMerge 435 None
+                              BranchConditional 433 434 435
+             434:               Label
+             436:    429(ptr)   AccessChain 353(ubo) 316
+             437:    180(int)   Load 436
+                                SelectionMerge 443 None
+                                Switch 437 443 
+                                       case 1: 438
+                                       case 2: 439
+                                       case 3: 440
+                                       case 4: 441
+                                       case 5: 442
+             438:                 Label
+                                  Store 450(param) 449
+             452:   69(fvec3)     Load 385(fragPos)
+                                  Store 451(param) 452
+             453:   69(fvec3)     FunctionCall 76(shadow(vf3;vf3;) 450(param) 451(param)
+             455:    454(ptr)     AccessChain 445(outFragColor) 11
+             456:   23(float)     CompositeExtract 453 0
+                                  Store 455 456
+             457:    454(ptr)     AccessChain 445(outFragColor) 19
+             458:   23(float)     CompositeExtract 453 1
+                                  Store 457 458
+             459:    454(ptr)     AccessChain 445(outFragColor) 21
+             460:   23(float)     CompositeExtract 453 2
+                                  Store 459 460
+                                  Branch 443
+             439:                 Label
+             462:   69(fvec3)     Load 385(fragPos)
+             463:    454(ptr)     AccessChain 445(outFragColor) 11
+             464:   23(float)     CompositeExtract 462 0
+                                  Store 463 464
+             465:    454(ptr)     AccessChain 445(outFragColor) 19
+             466:   23(float)     CompositeExtract 462 1
+                                  Store 465 466
+             467:    454(ptr)     AccessChain 445(outFragColor) 21
+             468:   23(float)     CompositeExtract 462 2
+                                  Store 467 468
+                                  Branch 443
+             440:                 Label
+             470:   69(fvec3)     Load 406(normal)
+             471:    454(ptr)     AccessChain 445(outFragColor) 11
+             472:   23(float)     CompositeExtract 470 0
+                                  Store 471 472
+             473:    454(ptr)     AccessChain 445(outFragColor) 19
+             474:   23(float)     CompositeExtract 470 1
+                                  Store 473 474
+             475:    454(ptr)     AccessChain 445(outFragColor) 21
+             476:   23(float)     CompositeExtract 470 2
+                                  Store 475 476
+                                  Branch 443
+             441:                 Label
+             478:   26(fvec4)     Load 418(albedo)
+             479:   69(fvec3)     VectorShuffle 478 478 0 1 2
+             480:    454(ptr)     AccessChain 445(outFragColor) 11
+             481:   23(float)     CompositeExtract 479 0
+                                  Store 480 481
+             482:    454(ptr)     AccessChain 445(outFragColor) 19
+             483:   23(float)     CompositeExtract 479 1
+                                  Store 482 483
+             484:    454(ptr)     AccessChain 445(outFragColor) 21
+             485:   23(float)     CompositeExtract 479 2
+                                  Store 484 485
+                                  Branch 443
+             442:                 Label
+             487:   26(fvec4)     Load 418(albedo)
+             488:   69(fvec3)     VectorShuffle 487 487 3 3 3
+             489:    454(ptr)     AccessChain 445(outFragColor) 11
+             490:   23(float)     CompositeExtract 488 0
+                                  Store 489 490
+             491:    454(ptr)     AccessChain 445(outFragColor) 19
+             492:   23(float)     CompositeExtract 488 1
+                                  Store 491 492
+             493:    454(ptr)     AccessChain 445(outFragColor) 21
+             494:   23(float)     CompositeExtract 488 2
+                                  Store 493 494
+                                  Branch 443
+             443:               Label
+             497:    454(ptr)   AccessChain 445(outFragColor) 12
+                                Store 497 93
+                                Return
+             435:             Label
+             502:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 500 499(fragcolor) 47
+             503:   26(fvec4) Load 418(albedo)
+             504:   69(fvec3) VectorShuffle 503 503 0 1 2
+             506:   69(fvec3) VectorTimesScalar 504 505
+                              Store 499(fragcolor) 506
+             511:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 508 507(N) 47
+             512:   69(fvec3) Load 406(normal)
+             513:   69(fvec3) ExtInst 2(GLSL.std.450) 69(Normalize) 512
+                              Store 507(N) 513
+             517:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 515 514(i) 47
+                              Store 514(i) 192
+                              Branch 518
+             518:             Label
+                              LoopMerge 520 521 None
+                              Branch 522
+             522:             Label
+             523:    180(int) Load 514(i)
+             525:   114(bool) SLessThan 523 316
+                              BranchConditional 525 519 520
+             519:               Label
+             530:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 527 526(L) 47
+             531:    180(int)   Load 514(i)
+             533:    532(ptr)   AccessChain 353(ubo) 242 531 192
+             534:   26(fvec4)   Load 533
+             535:   69(fvec3)   VectorShuffle 534 534 0 1 2
+             536:   69(fvec3)   Load 385(fragPos)
+             537:   69(fvec3)   FSub 535 536
+                                Store 526(L) 537
+             541:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 539 538(dist) 47
+             542:   69(fvec3)   Load 526(L)
+             543:   23(float)   ExtInst 2(GLSL.std.450) 66(Length) 542
+                                Store 538(dist) 543
+             544:   69(fvec3)   Load 526(L)
+             545:   69(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 544
+                                Store 526(L) 545
+             550:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 547 546(V) 47
+             551:    532(ptr)   AccessChain 353(ubo) 192
+             552:   26(fvec4)   Load 551
+             553:   69(fvec3)   VectorShuffle 552 552 0 1 2
+             554:   69(fvec3)   Load 385(fragPos)
+             555:   69(fvec3)   FSub 553 554
+                                Store 546(V) 555
+             556:   69(fvec3)   Load 546(V)
+             557:   69(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 556
+                                Store 546(V) 557
+             562:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 559 558(lightCosInnerAngle) 47
+                                Store 558(lightCosInnerAngle) 563
+             568:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 565 564(lightCosOuterAngle) 47
+                                Store 564(lightCosOuterAngle) 569
+             574:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 571 570(lightRange) 47
+                                Store 570(lightRange) 575
+             580:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 577 576(dir) 47
+             581:    180(int)   Load 514(i)
+             582:    532(ptr)   AccessChain 353(ubo) 242 581 192
+             583:   26(fvec4)   Load 582
+             584:   69(fvec3)   VectorShuffle 583 583 0 1 2
+             585:    180(int)   Load 514(i)
+             586:    532(ptr)   AccessChain 353(ubo) 242 585 242
+             587:   26(fvec4)   Load 586
+             588:   69(fvec3)   VectorShuffle 587 587 0 1 2
+             589:   69(fvec3)   FSub 584 588
+             590:   69(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 589
+                                Store 576(dir) 590
+             595:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 592 591(cosDir) 47
+             596:   69(fvec3)   Load 526(L)
+             597:   69(fvec3)   Load 576(dir)
+             598:   23(float)   Dot 596 597
+                                Store 591(cosDir) 598
+             603:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 600 599(spotEffect) 47
+             604:   23(float)   Load 564(lightCosOuterAngle)
+             605:   23(float)   Load 558(lightCosInnerAngle)
+             606:   23(float)   Load 591(cosDir)
+             607:   23(float)   ExtInst 2(GLSL.std.450) 49(SmoothStep) 604 605 606
+                                Store 599(spotEffect) 607
+             612:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 609 608(heightAttenuation) 47
+             613:   23(float)   Load 570(lightRange)
+             614:   23(float)   Load 538(dist)
+             615:   23(float)   ExtInst 2(GLSL.std.450) 49(SmoothStep) 613 162 614
+                                Store 608(heightAttenuation) 615
+             620:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 617 616(NdotL) 47
+             621:   69(fvec3)   Load 507(N)
+             622:   69(fvec3)   Load 526(L)
+             623:   23(float)   Dot 621 622
+             624:   23(float)   ExtInst 2(GLSL.std.450) 40(FMax) 162 623
+                                Store 616(NdotL) 624
+             629:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 626 625(diff) 47
+             630:   23(float)   Load 616(NdotL)
+             631:   69(fvec3)   CompositeConstruct 630 630 630
+                                Store 625(diff) 631
+             636:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 633 632(R) 47
+             637:   69(fvec3)   Load 526(L)
+             638:   69(fvec3)   FNegate 637
+             639:   69(fvec3)   Load 507(N)
+             640:   69(fvec3)   ExtInst 2(GLSL.std.450) 71(Reflect) 638 639
+                                Store 632(R) 640
+             645:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 642 641(NdotR) 47
+             646:   69(fvec3)   Load 632(R)
+             647:   69(fvec3)   Load 546(V)
+             648:   23(float)   Dot 646 647
+             649:   23(float)   ExtInst 2(GLSL.std.450) 40(FMax) 162 648
+                                Store 641(NdotR) 649
+             654:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 651 650(spec) 47
+             655:   23(float)   Load 641(NdotR)
+             657:   23(float)   ExtInst 2(GLSL.std.450) 26(Pow) 655 656
+             658:     29(ptr)   AccessChain 418(albedo) 12
+             659:   23(float)   Load 658
+             660:   23(float)   FMul 657 659
+             662:   23(float)   FMul 660 661
+             663:   69(fvec3)   CompositeConstruct 662 662 662
+                                Store 650(spec) 663
+             664:   69(fvec3)   Load 625(diff)
+             665:   69(fvec3)   Load 650(spec)
+             666:   69(fvec3)   FAdd 664 665
+             667:   23(float)   Load 599(spotEffect)
+             668:   69(fvec3)   VectorTimesScalar 666 667
+             669:   23(float)   Load 608(heightAttenuation)
+             670:   69(fvec3)   VectorTimesScalar 668 669
+             671:   23(float)   CompositeExtract 670 0
+             672:   23(float)   CompositeExtract 670 1
+             673:   23(float)   CompositeExtract 670 2
+             674:   69(fvec3)   CompositeConstruct 671 672 673
+             675:    180(int)   Load 514(i)
+             677:    532(ptr)   AccessChain 353(ubo) 242 675 676
+             678:   26(fvec4)   Load 677
+             679:   69(fvec3)   VectorShuffle 678 678 0 1 2
+             680:   69(fvec3)   FMul 674 679
+             681:   26(fvec4)   Load 418(albedo)
+             682:   69(fvec3)   VectorShuffle 681 681 0 1 2
+             683:   69(fvec3)   FMul 680 682
+             684:   69(fvec3)   Load 499(fragcolor)
+             685:   69(fvec3)   FAdd 684 683
+                                Store 499(fragcolor) 685
+                                Branch 521
+             521:               Label
+             686:    180(int)   Load 514(i)
+             687:    180(int)   IAdd 686 242
+                                Store 514(i) 687
+                                Branch 518
+             520:             Label
+             688:    429(ptr) AccessChain 353(ubo) 676
+             689:    180(int) Load 688
+             691:   114(bool) SGreaterThan 689 192
+                              SelectionMerge 693 None
+                              BranchConditional 691 692 693
+             692:               Label
+             695:   69(fvec3)   Load 499(fragcolor)
+                                Store 694(param) 695
+             697:   69(fvec3)   Load 385(fragPos)
+                                Store 696(param) 697
+             698:   69(fvec3)   FunctionCall 76(shadow(vf3;vf3;) 694(param) 696(param)
+                                Store 499(fragcolor) 698
+                                Branch 693
+             693:             Label
+             699:   69(fvec3) Load 499(fragcolor)
+             700:   23(float) CompositeExtract 699 0
+             701:   23(float) CompositeExtract 699 1
+             702:   23(float) CompositeExtract 699 2
+             703:   26(fvec4) CompositeConstruct 700 701 702 93
+                              Store 445(outFragColor) 703
+                              Return
+                              FunctionEnd
+38(textureProj(vf4;f1;vf2;):   23(float) Function None 33
+           35(P):     28(ptr) FunctionParameter
+       36(layer):     29(ptr) FunctionParameter
+      37(offset):     32(ptr) FunctionParameter
+              41:             Label
+      89(shadow):     29(ptr) Variable Function
+ 94(shadowCoord):     28(ptr) Variable Function
+       130(dist):     29(ptr) Variable Function
+              42:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 40
+              43:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 16 11 11 11 11
+              46:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 44 35(P) 47
+              50:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 48 36(layer) 47
+              53:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 51 37(offset) 47
+              88:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 40 38(textureProj(vf4;f1;vf2;)
+              92:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 90 89(shadow) 47
+                              Store 89(shadow) 93
+              98:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 95 94(shadowCoord) 47
+              99:   26(fvec4) Load 35(P)
+             100:     29(ptr) AccessChain 35(P) 12
+             101:   23(float) Load 100
+             102:   26(fvec4) CompositeConstruct 101 101 101 101
+             103:   26(fvec4) FDiv 99 102
+                              Store 94(shadowCoord) 103
+             104:   26(fvec4) Load 94(shadowCoord)
+             105:   30(fvec2) VectorShuffle 104 104 0 1
+             107:   30(fvec2) VectorTimesScalar 105 106
+             108:   30(fvec2) CompositeConstruct 106 106
+             109:   30(fvec2) FAdd 107 108
+             110:     29(ptr) AccessChain 94(shadowCoord) 11
+             111:   23(float) CompositeExtract 109 0
+                              Store 110 111
+             112:     29(ptr) AccessChain 94(shadowCoord) 19
+             113:   23(float) CompositeExtract 109 1
+                              Store 112 113
+             115:     29(ptr) AccessChain 94(shadowCoord) 21
+             116:   23(float) Load 115
+             120:   114(bool) FOrdGreaterThan 116 117
+                              SelectionMerge 122 None
+                              BranchConditional 120 121 122
+             121:               Label
+             123:     29(ptr)   AccessChain 94(shadowCoord) 21
+             124:   23(float)   Load 123
+             126:   114(bool)   FOrdLessThan 124 93
+                                Branch 122
+             122:             Label
+             127:   114(bool) Phi 120 41 126 121
+                              SelectionMerge 129 None
+                              BranchConditional 127 128 129
+             128:               Label
+             134:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 131 130(dist) 47
+             149:         140   Load 145(samplerShadowMap)
+             150:   26(fvec4)   Load 94(shadowCoord)
+             151:   30(fvec2)   VectorShuffle 150 150 0 1
+             152:   30(fvec2)   Load 37(offset)
+             153:   30(fvec2)   FAdd 151 152
+             154:   23(float)   Load 36(layer)
+             155:   23(float)   CompositeExtract 153 0
+             156:   23(float)   CompositeExtract 153 1
+             157:   69(fvec3)   CompositeConstruct 155 156 154
+             158:   26(fvec4)   ImageSampleImplicitLod 149 157
+             159:   23(float)   CompositeExtract 158 0
+                                Store 130(dist) 159
+             160:     29(ptr)   AccessChain 94(shadowCoord) 12
+             161:   23(float)   Load 160
+             164:   114(bool)   FOrdGreaterThan 161 162
+                                SelectionMerge 166 None
+                                BranchConditional 164 165 166
+             165:                 Label
+             167:   23(float)     Load 130(dist)
+             168:     29(ptr)     AccessChain 94(shadowCoord) 21
+             169:   23(float)     Load 168
+             171:   114(bool)     FOrdLessThan 167 169
+                                  Branch 166
+             166:               Label
+             172:   114(bool)   Phi 164 128 171 165
+                                SelectionMerge 174 None
+                                BranchConditional 172 173 174
+             173:                 Label
+                                  Store 89(shadow) 175
+                                  Branch 174
+             174:               Label
+                                Branch 129
+             129:             Label
+             176:   23(float) Load 89(shadow)
+                              ReturnValue 176
+                              FunctionEnd
+58(filterPCF(vf4;f1;):   23(float) Function None 54
+          56(sc):     28(ptr) FunctionParameter
+       57(layer):     29(ptr) FunctionParameter
+              61:             Label
+     186(texDim):    185(ptr) Variable Function
+      198(scale):     29(ptr) Variable Function
+         204(dx):     29(ptr) Variable Function
+         216(dy):     29(ptr) Variable Function
+227(shadowFactor):     29(ptr) Variable Function
+      232(count):    211(ptr) Variable Function
+      237(range):    211(ptr) Variable Function
+          243(x):    211(ptr) Variable Function
+          259(y):    211(ptr) Variable Function
+      284(param):     28(ptr) Variable Function
+      286(param):     29(ptr) Variable Function
+      288(param):     32(ptr) Variable Function
+              62:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 60
+              63:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 16 11 11 11 11
+              66:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 64 56(sc) 47
+              68:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 67 57(layer) 47
+             179:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 60 58(filterPCF(vf4;f1;)
+             190:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 187 186(texDim) 47
+             191:         140 Load 145(samplerShadowMap)
+             193:         135 Image 191
+             196:  194(ivec3) ImageQuerySizeLod 193 192
+             197:  183(ivec2) VectorShuffle 196 196 0 1
+                              Store 186(texDim) 197
+             202:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 199 198(scale) 47
+                              Store 198(scale) 203
+             208:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 205 204(dx) 47
+             209:   23(float) Load 198(scale)
+             210:   23(float) FMul 209 93
+             212:    211(ptr) AccessChain 186(texDim) 11
+             213:    180(int) Load 212
+             214:   23(float) ConvertSToF 213
+             215:   23(float) FDiv 210 214
+                              Store 204(dx) 215
+             220:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 217 216(dy) 47
+             221:   23(float) Load 198(scale)
+             222:   23(float) FMul 221 93
+             223:    211(ptr) AccessChain 186(texDim) 19
+             224:    180(int) Load 223
+             225:   23(float) ConvertSToF 224
+             226:   23(float) FDiv 222 225
+                              Store 216(dy) 226
+             231:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 228 227(shadowFactor) 47
+                              Store 227(shadowFactor) 162
+             236:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 233 232(count) 47
+                              Store 232(count) 192
+             241:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 238 237(range) 47
+                              Store 237(range) 242
+             247:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 244 243(x) 47
+             248:    180(int) Load 237(range)
+             249:    180(int) SNegate 248
+                              Store 243(x) 249
+                              Branch 250
+             250:             Label
+                              LoopMerge 252 253 None
+                              Branch 254
+             254:             Label
+             255:    180(int) Load 243(x)
+             256:    180(int) Load 237(range)
+             258:   114(bool) SLessThanEqual 255 256
+                              BranchConditional 258 251 252
+             251:               Label
+             263:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 260 259(y) 47
+             264:    180(int)   Load 237(range)
+             265:    180(int)   SNegate 264
+                                Store 259(y) 265
+                                Branch 266
+             266:               Label
+                                LoopMerge 268 269 None
+                                Branch 270
+             270:               Label
+             271:    180(int)   Load 259(y)
+             272:    180(int)   Load 237(range)
+             274:   114(bool)   SLessThanEqual 271 272
+                                BranchConditional 274 267 268
+             267:                 Label
+             275:   23(float)     Load 204(dx)
+             276:    180(int)     Load 243(x)
+             277:   23(float)     ConvertSToF 276
+             278:   23(float)     FMul 275 277
+             279:   23(float)     Load 216(dy)
+             280:    180(int)     Load 259(y)
+             281:   23(float)     ConvertSToF 280
+             282:   23(float)     FMul 279 281
+             283:   30(fvec2)     CompositeConstruct 278 282
+             285:   26(fvec4)     Load 56(sc)
+                                  Store 284(param) 285
+             287:   23(float)     Load 57(layer)
+                                  Store 286(param) 287
+                                  Store 288(param) 283
+             289:   23(float)     FunctionCall 38(textureProj(vf4;f1;vf2;) 284(param) 286(param) 288(param)
+             290:   23(float)     Load 227(shadowFactor)
+             291:   23(float)     FAdd 290 289
+                                  Store 227(shadowFactor) 291
+             292:    180(int)     Load 232(count)
+             293:    180(int)     IAdd 292 242
+                                  Store 232(count) 293
+                                  Branch 269
+             269:                 Label
+             294:    180(int)     Load 259(y)
+             295:    180(int)     IAdd 294 242
+                                  Store 259(y) 295
+                                  Branch 266
+             268:               Label
+                                Branch 253
+             253:               Label
+             296:    180(int)   Load 243(x)
+             297:    180(int)   IAdd 296 242
+                                Store 243(x) 297
+                                Branch 250
+             252:             Label
+             298:   23(float) Load 227(shadowFactor)
+             299:    180(int) Load 232(count)
+             300:   23(float) ConvertSToF 299
+             301:   23(float) FDiv 298 300
+                              ReturnValue 301
+                              FunctionEnd
+76(shadow(vf3;vf3;):   69(fvec3) Function None 72
+   74(fragcolor):     71(ptr) FunctionParameter
+     75(fragpos):     71(ptr) FunctionParameter
+              79:             Label
+          305(i):    211(ptr) Variable Function
+ 319(shadowClip):     28(ptr) Variable Function
+366(shadowFactor):     29(ptr) Variable Function
+      372(param):     28(ptr) Variable Function
+      374(param):     29(ptr) Variable Function
+              80:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 78
+              81:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 16 11 11 11 11
+              84:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 82 74(fragcolor) 47
+              87:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 85 75(fragpos) 47
+             304:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 78 76(shadow(vf3;vf3;)
+             309:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 306 305(i) 47
+                              Store 305(i) 192
+                              Branch 310
+             310:             Label
+                              LoopMerge 312 313 None
+                              Branch 314
+             314:             Label
+             315:    180(int) Load 305(i)
+             318:   114(bool) SLessThan 315 316
+                              BranchConditional 318 311 312
+             311:               Label
+             323:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 320 319(shadowClip) 47
+             356:    180(int)   Load 305(i)
+             358:    357(ptr)   AccessChain 353(ubo) 242 356 316
+             359:         324   Load 358
+             360:   69(fvec3)   Load 75(fragpos)
+             361:   23(float)   CompositeExtract 360 0
+             362:   23(float)   CompositeExtract 360 1
+             363:   23(float)   CompositeExtract 360 2
+             364:   26(fvec4)   CompositeConstruct 361 362 363 93
+             365:   26(fvec4)   MatrixTimesVector 359 364
+                                Store 319(shadowClip) 365
+             369:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 367 366(shadowFactor) 47
+             370:    180(int)   Load 305(i)
+             371:   23(float)   ConvertSToF 370
+             373:   26(fvec4)   Load 319(shadowClip)
+                                Store 372(param) 373
+                                Store 374(param) 371
+             375:   23(float)   FunctionCall 58(filterPCF(vf4;f1;) 372(param) 374(param)
+                                Store 366(shadowFactor) 375
+             376:   23(float)   Load 366(shadowFactor)
+             377:   69(fvec3)   Load 74(fragcolor)
+             378:   69(fvec3)   VectorTimesScalar 377 376
+                                Store 74(fragcolor) 378
+                                Branch 313
+             313:               Label
+             379:    180(int)   Load 305(i)
+             380:    180(int)   IAdd 379 242
+                                Store 305(i) 380
+                                Branch 310
+             312:             Label
+             381:   69(fvec3) Load 74(fragcolor)
+                              ReturnValue 381
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.geom.out b/Test/baseResults/spv.debuginfo.glsl.geom.out
new file mode 100644
index 0000000..07f8f52
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.glsl.geom.out
@@ -0,0 +1,332 @@
+spv.debuginfo.glsl.geom
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 231
+
+                              Capability Geometry
+                              Capability MultiViewport
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 13  "main" 52 85 104 112 116 146 181 189 206 216 221 225
+                              ExecutionMode 13 Triangles
+                              ExecutionMode 13 Invocations 2
+                              ExecutionMode 13 OutputTriangleStrip
+                              ExecutionMode 13 OutputVertices 3
+               8:             String  "uint"
+              14:             String  "main"
+              17:             String  ""
+              25:             String  "int"
+              30:             String  "i"
+              43:             String  "bool"
+              47:             String  "float"
+              54:             String  "outNormal"
+              68:             String  "projection"
+              72:             String  "modelview"
+              75:             String  "lightPos"
+              78:             String  "UBO"
+              82:             String  "ubo"
+              87:             String  "gl_InvocationID"
+             106:             String  "inNormal"
+             114:             String  "outColor"
+             118:             String  "inColor"
+             125:             String  "pos"
+             132:             String  "gl_Position"
+             135:             String  "gl_PointSize"
+             138:             String  "gl_CullDistance"
+             142:             String  "gl_PerVertex"
+             148:             String  "gl_in"
+             155:             String  "worldPos"
+             166:             String  "lPos"
+             183:             String  "outLightVec"
+             191:             String  "outViewVec"
+             218:             String  "gl_ViewportIndex"
+             223:             String  "gl_PrimitiveID"
+             227:             String  "gl_PrimitiveIDIn"
+                              SourceExtension  "GL_ARB_viewport_array"
+                              Name 13  "main"
+                              Name 28  "i"
+                              Name 52  "outNormal"
+                              Name 66  "UBO"
+                              MemberName 66(UBO) 0  "projection"
+                              MemberName 66(UBO) 1  "modelview"
+                              MemberName 66(UBO) 2  "lightPos"
+                              Name 80  "ubo"
+                              Name 85  "gl_InvocationID"
+                              Name 104  "inNormal"
+                              Name 112  "outColor"
+                              Name 116  "inColor"
+                              Name 123  "pos"
+                              Name 130  "gl_PerVertex"
+                              MemberName 130(gl_PerVertex) 0  "gl_Position"
+                              MemberName 130(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 130(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 130(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 146  "gl_in"
+                              Name 153  "worldPos"
+                              Name 164  "lPos"
+                              Name 181  "outLightVec"
+                              Name 189  "outViewVec"
+                              Name 196  "gl_PerVertex"
+                              MemberName 196(gl_PerVertex) 0  "gl_Position"
+                              MemberName 196(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 196(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 196(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 206  ""
+                              Name 216  "gl_ViewportIndex"
+                              Name 221  "gl_PrimitiveID"
+                              Name 225  "gl_PrimitiveIDIn"
+                              Decorate 52(outNormal) Location 0
+                              Decorate 62 ArrayStride 64
+                              Decorate 64 ArrayStride 64
+                              MemberDecorate 66(UBO) 0 ColMajor
+                              MemberDecorate 66(UBO) 0 Offset 0
+                              MemberDecorate 66(UBO) 0 MatrixStride 16
+                              MemberDecorate 66(UBO) 1 ColMajor
+                              MemberDecorate 66(UBO) 1 Offset 128
+                              MemberDecorate 66(UBO) 1 MatrixStride 16
+                              MemberDecorate 66(UBO) 2 Offset 256
+                              Decorate 66(UBO) Block
+                              Decorate 80(ubo) DescriptorSet 0
+                              Decorate 80(ubo) Binding 0
+                              Decorate 85(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 104(inNormal) Location 0
+                              Decorate 112(outColor) Location 1
+                              Decorate 116(inColor) Location 1
+                              MemberDecorate 130(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 130(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 130(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 130(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 130(gl_PerVertex) Block
+                              Decorate 181(outLightVec) Location 3
+                              Decorate 189(outViewVec) Location 2
+                              MemberDecorate 196(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 196(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 196(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 196(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 196(gl_PerVertex) Block
+                              Decorate 216(gl_ViewportIndex) BuiltIn ViewportIndex
+                              Decorate 221(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 225(gl_PrimitiveIDIn) BuiltIn PrimitiveId
+               3:             TypeVoid
+               4:             TypeFunction 3
+               6:             TypeInt 32 0
+               9:      6(int) Constant 32
+              10:      6(int) Constant 6
+              11:      6(int) Constant 0
+               7:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 8 9 10 11
+              12:      6(int) Constant 3
+               5:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 3
+              16:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 17
+              19:      6(int) Constant 1
+              20:      6(int) Constant 4
+              21:      6(int) Constant 2
+              18:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 19 20 16 21
+              15:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 14 5 16 11 11 18 14 12 11
+              24:             TypeInt 32 1
+              26:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 25 9 20 11
+              27:             TypePointer Function 24(int)
+              31:      6(int) Constant 49
+              29:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 30 26 16 31 11 15 20
+              33:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              34:     24(int) Constant 0
+              41:     24(int) Constant 3
+              42:             TypeBool
+              44:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 43 9 21 11
+              46:             TypeFloat 32
+              48:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 12 11
+              49:             TypeVector 46(float) 3
+              50:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 48 12
+              51:             TypePointer Output 49(fvec3)
+   52(outNormal):     51(ptr) Variable Output
+              55:      6(int) Constant 51
+              56:      6(int) Constant 8
+              53:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 54 50 16 55 11 18 54 52(outNormal) 56
+              57:             TypeVector 46(float) 4
+              58:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 48 20
+              59:             TypeMatrix 57(fvec4) 4
+              61:    42(bool) ConstantTrue
+              60:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 58 20 61
+              62:             TypeArray 59 21
+              63:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 60 21
+              64:             TypeArray 59 21
+              65:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 60 21
+         66(UBO):             TypeStruct 62 64 57(fvec4)
+              69:      6(int) Constant 34
+              70:      6(int) Constant 7
+              67:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 68 63 16 69 70 11 11 12
+              73:      6(int) Constant 35
+              71:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 72 65 16 73 70 11 11 12
+              76:      6(int) Constant 36
+              74:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 75 58 16 76 70 11 11 12
+              77:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 78 19 16 55 11 18 78 11 12 67 71 74
+              79:             TypePointer Uniform 66(UBO)
+         80(ubo):     79(ptr) Variable Uniform
+              81:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 82 77 16 55 11 18 82 80(ubo) 56
+              83:     24(int) Constant 1
+              84:             TypePointer Input 24(int)
+85(gl_InvocationID):     84(ptr) Variable Input
+              86:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 87 26 16 55 11 18 87 85(gl_InvocationID) 56
+              89:             TypePointer Uniform 59
+              92:             TypeMatrix 49(fvec3) 3
+              93:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 50 12 61
+             101:             TypeArray 49(fvec3) 12
+             102:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 50 12
+             103:             TypePointer Input 101
+   104(inNormal):    103(ptr) Variable Input
+             105:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 106 102 16 55 11 18 106 104(inNormal) 56
+             108:             TypePointer Input 49(fvec3)
+   112(outColor):     51(ptr) Variable Output
+             115:      6(int) Constant 52
+             113:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 114 50 16 115 11 18 114 112(outColor) 56
+    116(inColor):    103(ptr) Variable Input
+             117:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 118 102 16 115 11 18 118 116(inColor) 56
+             122:             TypePointer Function 57(fvec4)
+             126:      6(int) Constant 54
+             124:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 125 58 16 126 11 15 20
+             128:             TypeArray 46(float) 19
+             129:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 48 19
+130(gl_PerVertex):             TypeStruct 57(fvec4) 46(float) 128 128
+             133:      6(int) Constant 23
+             131:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 132 58 16 21 133 11 11 12
+             136:      6(int) Constant 41
+             134:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 135 48 16 21 136 11 11 12
+             139:      6(int) Constant 84
+             137:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 138 129 16 21 139 11 11 12
+             140:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 138 129 16 21 139 11 11 12
+             141:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 142 19 16 126 11 18 142 11 12 131 134 137 140
+             143:             TypeArray 130(gl_PerVertex) 12
+             144:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 141 12
+             145:             TypePointer Input 143
+      146(gl_in):    145(ptr) Variable Input
+             147:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 148 144 16 126 11 18 148 146(gl_in) 56
+             150:             TypePointer Input 57(fvec4)
+             156:      6(int) Constant 55
+             154:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 155 58 16 156 11 15 20
+             163:             TypePointer Function 49(fvec3)
+             167:      6(int) Constant 57
+             165:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 166 50 16 167 11 15 20
+             172:     24(int) Constant 2
+             173:             TypePointer Uniform 57(fvec4)
+181(outLightVec):     51(ptr) Variable Output
+             184:      6(int) Constant 58
+             182:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 183 50 16 184 11 18 183 181(outLightVec) 56
+ 189(outViewVec):     51(ptr) Variable Output
+             192:      6(int) Constant 59
+             190:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 191 50 16 192 11 18 191 189(outViewVec) 56
+196(gl_PerVertex):             TypeStruct 57(fvec4) 46(float) 128 128
+             198:      6(int) Constant 215
+             197:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 132 58 16 21 198 11 11 12
+             200:      6(int) Constant 233
+             199:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 135 48 16 21 200 11 11 12
+             201:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 138 129 16 12 70 11 11 12
+             202:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 138 129 16 12 70 11 11 12
+             204:      6(int) Constant 61
+             203:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 142 19 16 204 11 18 142 11 12 197 199 201 202
+             205:             TypePointer Output 196(gl_PerVertex)
+             206:    205(ptr) Variable Output
+             207:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 17 203 16 204 11 18 17 206 56
+             213:             TypePointer Output 57(fvec4)
+             215:             TypePointer Output 24(int)
+216(gl_ViewportIndex):    215(ptr) Variable Output
+             219:      6(int) Constant 64
+             217:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 218 26 16 219 11 18 218 216(gl_ViewportIndex) 56
+221(gl_PrimitiveID):    215(ptr) Variable Output
+             224:      6(int) Constant 65
+             222:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 223 26 16 224 11 18 223 221(gl_PrimitiveID) 56
+225(gl_PrimitiveIDIn):     84(ptr) Variable Input
+             226:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 227 26 16 224 11 18 227 225(gl_PrimitiveIDIn) 56
+        13(main):           3 Function None 4
+              22:             Label
+           28(i):     27(ptr) Variable Function
+        123(pos):    122(ptr) Variable Function
+   153(worldPos):    122(ptr) Variable Function
+       164(lPos):    163(ptr) Variable Function
+              23:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 15 13(main)
+              32:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 29 28(i) 33
+                              Store 28(i) 34
+                              Branch 35
+              35:             Label
+                              LoopMerge 37 38 None
+                              Branch 39
+              39:             Label
+              40:     24(int) Load 28(i)
+              45:    42(bool) SLessThan 40 41
+                              BranchConditional 45 36 37
+              36:               Label
+              88:     24(int)   Load 85(gl_InvocationID)
+              90:     89(ptr)   AccessChain 80(ubo) 83 88
+              91:          59   Load 90
+              94:   57(fvec4)   CompositeExtract 91 0
+              95:   49(fvec3)   VectorShuffle 94 94 0 1 2
+              96:   57(fvec4)   CompositeExtract 91 1
+              97:   49(fvec3)   VectorShuffle 96 96 0 1 2
+              98:   57(fvec4)   CompositeExtract 91 2
+              99:   49(fvec3)   VectorShuffle 98 98 0 1 2
+             100:          92   CompositeConstruct 95 97 99
+             107:     24(int)   Load 28(i)
+             109:    108(ptr)   AccessChain 104(inNormal) 107
+             110:   49(fvec3)   Load 109
+             111:   49(fvec3)   MatrixTimesVector 100 110
+                                Store 52(outNormal) 111
+             119:     24(int)   Load 28(i)
+             120:    108(ptr)   AccessChain 116(inColor) 119
+             121:   49(fvec3)   Load 120
+                                Store 112(outColor) 121
+             127:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 124 123(pos) 33
+             149:     24(int)   Load 28(i)
+             151:    150(ptr)   AccessChain 146(gl_in) 149 34
+             152:   57(fvec4)   Load 151
+                                Store 123(pos) 152
+             157:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 154 153(worldPos) 33
+             158:     24(int)   Load 85(gl_InvocationID)
+             159:     89(ptr)   AccessChain 80(ubo) 83 158
+             160:          59   Load 159
+             161:   57(fvec4)   Load 123(pos)
+             162:   57(fvec4)   MatrixTimesVector 160 161
+                                Store 153(worldPos) 162
+             168:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 165 164(lPos) 33
+             169:     24(int)   Load 85(gl_InvocationID)
+             170:     89(ptr)   AccessChain 80(ubo) 83 169
+             171:          59   Load 170
+             174:    173(ptr)   AccessChain 80(ubo) 172
+             175:   57(fvec4)   Load 174
+             176:   57(fvec4)   MatrixTimesVector 171 175
+             177:   46(float)   CompositeExtract 176 0
+             178:   46(float)   CompositeExtract 176 1
+             179:   46(float)   CompositeExtract 176 2
+             180:   49(fvec3)   CompositeConstruct 177 178 179
+                                Store 164(lPos) 180
+             185:   49(fvec3)   Load 164(lPos)
+             186:   57(fvec4)   Load 153(worldPos)
+             187:   49(fvec3)   VectorShuffle 186 186 0 1 2
+             188:   49(fvec3)   FSub 185 187
+                                Store 181(outLightVec) 188
+             193:   57(fvec4)   Load 153(worldPos)
+             194:   49(fvec3)   VectorShuffle 193 193 0 1 2
+             195:   49(fvec3)   FNegate 194
+                                Store 189(outViewVec) 195
+             208:     24(int)   Load 85(gl_InvocationID)
+             209:     89(ptr)   AccessChain 80(ubo) 34 208
+             210:          59   Load 209
+             211:   57(fvec4)   Load 153(worldPos)
+             212:   57(fvec4)   MatrixTimesVector 210 211
+             214:    213(ptr)   AccessChain 206 34
+                                Store 214 212
+             220:     24(int)   Load 85(gl_InvocationID)
+                                Store 216(gl_ViewportIndex) 220
+             228:     24(int)   Load 225(gl_PrimitiveIDIn)
+                                Store 221(gl_PrimitiveID) 228
+                                EmitVertex
+                                Branch 38
+              38:               Label
+             229:     24(int)   Load 28(i)
+             230:     24(int)   IAdd 229 83
+                                Store 28(i) 230
+                                Branch 35
+              37:             Label
+                              EndPrimitive
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.tesc.out b/Test/baseResults/spv.debuginfo.glsl.tesc.out
new file mode 100644
index 0000000..ae9bfad
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.glsl.tesc.out
@@ -0,0 +1,619 @@
+spv.debuginfo.glsl.tesc
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 457
+
+                              Capability Tessellation
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 13  "main" 230 234 259 325 335 415 427 435 447
+                              ExecutionMode 13 OutputVertices 4
+               8:             String  "uint"
+              14:             String  "main"
+              17:             String  ""
+              24:             String  "float"
+              34:             String  "screenSpaceTessFactor"
+              40:             String  "p0"
+              44:             String  "p1"
+              47:             String  "bool"
+              52:             String  "frustumCheck"
+              58:             String  "midPoint"
+              69:             String  "radius"
+              79:             String  "v0"
+              91:             String  "modelview"
+              96:             String  "lightPos"
+              99:             String  "frustumPlanes"
+             101:             String  "tessellatedEdgeSize"
+             106:             String  "viewportDim"
+             110:             String  "UBO"
+             114:             String  "ubo"
+             116:             String  "int"
+             126:             String  "clip0"
+             146:             String  "clip1"
+             209:             String  "pos"
+             216:             String  "gl_Position"
+             219:             String  "gl_PointSize"
+             222:             String  "gl_CullDistance"
+             226:             String  "gl_PerVertex"
+             232:             String  "gl_in"
+             236:             String  "gl_InvocationID"
+             243:             String  "type.2d.image"
+             245:             String  "@type.2d.image"
+             249:             String  "type.sampled.image"
+             250:             String  "@type.sampled.image"
+             254:             String  "samplerHeight"
+             261:             String  "inUV"
+             278:             String  "i"
+             327:             String  "gl_TessLevelInner"
+             337:             String  "gl_TessLevelOuter"
+             417:             String  "gl_out"
+             429:             String  "outNormal"
+             437:             String  "inNormal"
+             449:             String  "outUV"
+                              Name 13  "main"
+                              Name 33  "screenSpaceTessFactor(vf4;vf4;"
+                              Name 31  "p0"
+                              Name 32  "p1"
+                              Name 51  "frustumCheck("
+                              Name 56  "midPoint"
+                              Name 67  "radius"
+                              Name 77  "v0"
+                              Name 89  "UBO"
+                              MemberName 89(UBO) 0  "projection"
+                              MemberName 89(UBO) 1  "modelview"
+                              MemberName 89(UBO) 2  "lightPos"
+                              MemberName 89(UBO) 3  "frustumPlanes"
+                              MemberName 89(UBO) 4  "displacementFactor"
+                              MemberName 89(UBO) 5  "tessellationFactor"
+                              MemberName 89(UBO) 6  "viewportDim"
+                              MemberName 89(UBO) 7  "tessellatedEdgeSize"
+                              Name 112  "ubo"
+                              Name 124  "clip0"
+                              Name 144  "clip1"
+                              Name 207  "pos"
+                              Name 214  "gl_PerVertex"
+                              MemberName 214(gl_PerVertex) 0  "gl_Position"
+                              MemberName 214(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 214(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 214(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 230  "gl_in"
+                              Name 234  "gl_InvocationID"
+                              Name 252  "samplerHeight"
+                              Name 259  "inUV"
+                              Name 276  "i"
+                              Name 325  "gl_TessLevelInner"
+                              Name 335  "gl_TessLevelOuter"
+                              Name 351  "param"
+                              Name 354  "param"
+                              Name 359  "param"
+                              Name 362  "param"
+                              Name 367  "param"
+                              Name 370  "param"
+                              Name 375  "param"
+                              Name 378  "param"
+                              Name 402  "gl_PerVertex"
+                              MemberName 402(gl_PerVertex) 0  "gl_Position"
+                              MemberName 402(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 402(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 402(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 415  "gl_out"
+                              Name 427  "outNormal"
+                              Name 435  "inNormal"
+                              Name 447  "outUV"
+                              Decorate 85 ArrayStride 16
+                              MemberDecorate 89(UBO) 0 ColMajor
+                              MemberDecorate 89(UBO) 0 Offset 0
+                              MemberDecorate 89(UBO) 0 MatrixStride 16
+                              MemberDecorate 89(UBO) 1 ColMajor
+                              MemberDecorate 89(UBO) 1 Offset 64
+                              MemberDecorate 89(UBO) 1 MatrixStride 16
+                              MemberDecorate 89(UBO) 2 Offset 128
+                              MemberDecorate 89(UBO) 3 Offset 144
+                              MemberDecorate 89(UBO) 4 Offset 240
+                              MemberDecorate 89(UBO) 5 Offset 244
+                              MemberDecorate 89(UBO) 6 Offset 248
+                              MemberDecorate 89(UBO) 7 Offset 256
+                              Decorate 89(UBO) Block
+                              Decorate 112(ubo) DescriptorSet 0
+                              Decorate 112(ubo) Binding 0
+                              MemberDecorate 214(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 214(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 214(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 214(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 214(gl_PerVertex) Block
+                              Decorate 234(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 252(samplerHeight) DescriptorSet 0
+                              Decorate 252(samplerHeight) Binding 1
+                              Decorate 259(inUV) Location 1
+                              Decorate 325(gl_TessLevelInner) Patch
+                              Decorate 325(gl_TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 335(gl_TessLevelOuter) Patch
+                              Decorate 335(gl_TessLevelOuter) BuiltIn TessLevelOuter
+                              MemberDecorate 402(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 402(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 402(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 402(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 402(gl_PerVertex) Block
+                              Decorate 427(outNormal) Location 0
+                              Decorate 435(inNormal) Location 0
+                              Decorate 447(outUV) Location 1
+               3:             TypeVoid
+               4:             TypeFunction 3
+               6:             TypeInt 32 0
+               9:      6(int) Constant 32
+              10:      6(int) Constant 6
+              11:      6(int) Constant 0
+               7:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 8 9 10 11
+              12:      6(int) Constant 3
+               5:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 3
+              16:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 17
+              19:      6(int) Constant 1
+              20:      6(int) Constant 4
+              21:      6(int) Constant 2
+              18:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 19 20 16 21
+              15:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 14 5 16 11 11 18 14 12 11
+              23:             TypeFloat 32
+              25:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 24 9 12 11
+              26:             TypeVector 23(float) 4
+              27:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 20
+              28:             TypePointer Function 26(fvec4)
+              29:             TypeFunction 23(float) 28(ptr) 28(ptr)
+              30:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 25 27 27
+              35:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 34 30 16 11 11 18 34 12 11
+              39:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 40 27 16 11 11 35 20 19
+              42:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              43:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 44 27 16 11 11 35 20 21
+              46:             TypeBool
+              48:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 21 11
+              49:             TypeFunction 46(bool)
+              50:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 48
+              53:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 52 50 16 11 11 18 52 12 11
+              59:      6(int) Constant 54
+              57:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 58 27 16 59 11 35 20
+              61:   23(float) Constant 1056964608
+              66:             TypePointer Function 23(float)
+              70:      6(int) Constant 56
+              68:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 69 25 16 70 11 35 20
+              75:   23(float) Constant 1073741824
+              80:      6(int) Constant 59
+              78:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 79 27 16 80 11 35 20
+              82:             TypeMatrix 26(fvec4) 4
+              84:    46(bool) ConstantTrue
+              83:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 27 20 84
+              85:             TypeArray 26(fvec4) 10
+              86:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 27 10
+              87:             TypeVector 23(float) 2
+              88:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 21
+         89(UBO):             TypeStruct 82 82 26(fvec4) 85 23(float) 23(float) 87(fvec2) 23(float)
+              92:      6(int) Constant 30
+              93:      6(int) Constant 7
+              90:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 91 83 16 92 93 11 11 12
+              94:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 91 83 16 92 93 11 11 12
+              97:      6(int) Constant 31
+              95:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 96 27 16 97 93 11 11 12
+              98:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 99 86 16 9 93 11 11 12
+             102:      6(int) Constant 36
+             103:      6(int) Constant 8
+             100:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 101 25 16 102 103 11 11 12
+             104:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 101 25 16 102 103 11 11 12
+             107:      6(int) Constant 35
+             105:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 106 88 16 107 93 11 11 12
+             108:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 101 25 16 102 103 11 11 12
+             109:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 110 19 16 80 11 18 110 11 12 90 94 95 98 100 104 105 108
+             111:             TypePointer Uniform 89(UBO)
+        112(ubo):    111(ptr) Variable Uniform
+             113:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 114 109 16 80 11 18 114 112(ubo) 103
+             115:             TypeInt 32 1
+             117:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 116 9 20 11
+             118:    115(int) Constant 1
+             119:             TypePointer Uniform 82
+             127:      6(int) Constant 62
+             125:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 126 27 16 127 11 35 20
+             129:    115(int) Constant 0
+             134:             TypeVector 23(float) 3
+             135:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 12
+             136:   23(float) Constant 0
+             137:  134(fvec3) ConstantComposite 136 136 136
+             147:      6(int) Constant 63
+             145:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 146 27 16 147 11 35 20
+             169:    115(int) Constant 6
+             170:             TypePointer Uniform 87(fvec2)
+             192:    115(int) Constant 7
+             193:             TypePointer Uniform 23(float)
+             197:    115(int) Constant 5
+             201:   23(float) Constant 1065353216
+             202:   23(float) Constant 1115684864
+             210:      6(int) Constant 85
+             208:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 209 27 16 210 11 53 20
+             212:             TypeArray 23(float) 19
+             213:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 25 19
+214(gl_PerVertex):             TypeStruct 26(fvec4) 23(float) 212 212
+             217:      6(int) Constant 1756
+             215:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 216 27 16 19 217 11 11 12
+             220:      6(int) Constant 1774
+             218:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 219 25 16 19 220 11 11 12
+             223:      6(int) Constant 1817
+             221:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 222 213 16 19 223 11 11 12
+             224:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 222 213 16 19 223 11 11 12
+             225:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 226 19 16 210 11 18 226 11 12 215 218 221 224
+             227:             TypeArray 214(gl_PerVertex) 9
+             228:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 225 9
+             229:             TypePointer Input 227
+      230(gl_in):    229(ptr) Variable Input
+             231:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 232 228 16 210 11 18 232 230(gl_in) 103
+             233:             TypePointer Input 115(int)
+234(gl_InvocationID):    233(ptr) Variable Input
+             235:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 236 117 16 210 11 18 236 234(gl_InvocationID) 103
+             238:             TypePointer Input 26(fvec4)
+             241:             TypeImage 23(float) 2D sampled format:Unknown
+             244:      6(int) Constant 86
+             246:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(Unknown)
+             242:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 243 11 16 244 11 18 245 246 12
+             247:             TypeSampledImage 241
+             248:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 249 11 16 244 11 18 250 246 12
+             251:             TypePointer UniformConstant 247
+252(samplerHeight):    251(ptr) Variable UniformConstant
+             253:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 254 248 16 244 11 18 254 252(samplerHeight) 103
+             256:             TypeArray 87(fvec2) 9
+             257:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 88 9
+             258:             TypePointer Input 256
+       259(inUV):    258(ptr) Variable Input
+             260:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 261 257 16 244 11 18 261 259(inUV) 103
+             262:             TypePointer Input 87(fvec2)
+             267:    115(int) Constant 4
+             275:             TypePointer Function 115(int)
+             279:      6(int) Constant 89
+             277:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 278 117 16 279 11 53 20
+             287:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 21 11
+             290:    115(int) Constant 3
+             292:             TypePointer Uniform 26(fvec4)
+             296:   23(float) Constant 1090519040
+             298:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 21 11
+             302:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 21 11
+             303:    46(bool) ConstantFalse
+             307:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 21 11
+             312:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 21 11
+             317:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 21 11
+             318:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 21 11
+             322:             TypeArray 23(float) 21
+             323:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 25 21
+             324:             TypePointer Output 322
+325(gl_TessLevelInner):    324(ptr) Variable Output
+             328:      6(int) Constant 104
+             326:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 327 323 16 328 11 18 327 325(gl_TessLevelInner) 103
+             329:             TypePointer Output 23(float)
+             332:             TypeArray 23(float) 20
+             333:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 25 20
+             334:             TypePointer Output 332
+335(gl_TessLevelOuter):    334(ptr) Variable Output
+             338:      6(int) Constant 106
+             336:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 337 333 16 338 11 18 337 335(gl_TessLevelOuter) 103
+             341:    115(int) Constant 2
+             347:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 47 9 21 11
+402(gl_PerVertex):             TypeStruct 26(fvec4) 23(float) 212 212
+             404:      6(int) Constant 110
+             403:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 216 27 16 19 404 11 11 12
+             406:      6(int) Constant 128
+             405:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 219 25 16 19 406 11 11 12
+             408:      6(int) Constant 171
+             407:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 222 213 16 19 408 11 11 12
+             409:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 222 213 16 19 408 11 11 12
+             411:      6(int) Constant 137
+             410:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 226 19 16 411 11 18 226 11 12 403 405 407 409
+             412:             TypeArray 402(gl_PerVertex) 20
+             413:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 410 20
+             414:             TypePointer Output 412
+     415(gl_out):    414(ptr) Variable Output
+             416:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 417 413 16 411 11 18 417 415(gl_out) 103
+             422:             TypePointer Output 26(fvec4)
+             424:             TypeArray 134(fvec3) 20
+             425:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 135 20
+             426:             TypePointer Output 424
+  427(outNormal):    426(ptr) Variable Output
+             430:      6(int) Constant 138
+             428:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 429 425 16 430 11 18 429 427(outNormal) 103
+             432:             TypeArray 134(fvec3) 9
+             433:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 135 9
+             434:             TypePointer Input 432
+   435(inNormal):    434(ptr) Variable Input
+             436:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 437 433 16 430 11 18 437 435(inNormal) 103
+             439:             TypePointer Input 134(fvec3)
+             442:             TypePointer Output 134(fvec3)
+             444:             TypeArray 87(fvec2) 20
+             445:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 88 20
+             446:             TypePointer Output 444
+      447(outUV):    446(ptr) Variable Output
+             450:      6(int) Constant 139
+             448:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 449 445 16 450 11 18 449 447(outUV) 103
+             455:             TypePointer Output 87(fvec2)
+        13(main):           3 Function None 4
+              22:             Label
+      351(param):     28(ptr) Variable Function
+      354(param):     28(ptr) Variable Function
+      359(param):     28(ptr) Variable Function
+      362(param):     28(ptr) Variable Function
+      367(param):     28(ptr) Variable Function
+      370(param):     28(ptr) Variable Function
+      375(param):     28(ptr) Variable Function
+      378(param):     28(ptr) Variable Function
+             310:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 15 13(main)
+             311:    115(int) Load 234(gl_InvocationID)
+             313:    46(bool) IEqual 311 129
+                              SelectionMerge 315 None
+                              BranchConditional 313 314 315
+             314:               Label
+             316:    46(bool)   FunctionCall 51(frustumCheck()
+             319:    46(bool)   LogicalNot 316
+                                SelectionMerge 321 None
+                                BranchConditional 319 320 344
+             320:                 Label
+             330:    329(ptr)     AccessChain 325(gl_TessLevelInner) 129
+                                  Store 330 136
+             331:    329(ptr)     AccessChain 325(gl_TessLevelInner) 118
+                                  Store 331 136
+             339:    329(ptr)     AccessChain 335(gl_TessLevelOuter) 129
+                                  Store 339 136
+             340:    329(ptr)     AccessChain 335(gl_TessLevelOuter) 118
+                                  Store 340 136
+             342:    329(ptr)     AccessChain 335(gl_TessLevelOuter) 341
+                                  Store 342 136
+             343:    329(ptr)     AccessChain 335(gl_TessLevelOuter) 290
+                                  Store 343 136
+                                  Branch 321
+             344:                 Label
+             345:    193(ptr)     AccessChain 112(ubo) 197
+             346:   23(float)     Load 345
+             348:    46(bool)     FOrdGreaterThan 346 136
+                                  SelectionMerge 350 None
+                                  BranchConditional 348 349 395
+             349:                   Label
+             352:    238(ptr)       AccessChain 230(gl_in) 290 129
+             353:   26(fvec4)       Load 352
+                                    Store 351(param) 353
+             355:    238(ptr)       AccessChain 230(gl_in) 129 129
+             356:   26(fvec4)       Load 355
+                                    Store 354(param) 356
+             357:   23(float)       FunctionCall 33(screenSpaceTessFactor(vf4;vf4;) 351(param) 354(param)
+             358:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 129
+                                    Store 358 357
+             360:    238(ptr)       AccessChain 230(gl_in) 129 129
+             361:   26(fvec4)       Load 360
+                                    Store 359(param) 361
+             363:    238(ptr)       AccessChain 230(gl_in) 118 129
+             364:   26(fvec4)       Load 363
+                                    Store 362(param) 364
+             365:   23(float)       FunctionCall 33(screenSpaceTessFactor(vf4;vf4;) 359(param) 362(param)
+             366:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 118
+                                    Store 366 365
+             368:    238(ptr)       AccessChain 230(gl_in) 118 129
+             369:   26(fvec4)       Load 368
+                                    Store 367(param) 369
+             371:    238(ptr)       AccessChain 230(gl_in) 341 129
+             372:   26(fvec4)       Load 371
+                                    Store 370(param) 372
+             373:   23(float)       FunctionCall 33(screenSpaceTessFactor(vf4;vf4;) 367(param) 370(param)
+             374:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 341
+                                    Store 374 373
+             376:    238(ptr)       AccessChain 230(gl_in) 341 129
+             377:   26(fvec4)       Load 376
+                                    Store 375(param) 377
+             379:    238(ptr)       AccessChain 230(gl_in) 290 129
+             380:   26(fvec4)       Load 379
+                                    Store 378(param) 380
+             381:   23(float)       FunctionCall 33(screenSpaceTessFactor(vf4;vf4;) 375(param) 378(param)
+             382:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 290
+                                    Store 382 381
+             383:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 129
+             384:   23(float)       Load 383
+             385:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 290
+             386:   23(float)       Load 385
+             387:   23(float)       ExtInst 2(GLSL.std.450) 46(FMix) 384 386 61
+             388:    329(ptr)       AccessChain 325(gl_TessLevelInner) 129
+                                    Store 388 387
+             389:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 341
+             390:   23(float)       Load 389
+             391:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 118
+             392:   23(float)       Load 391
+             393:   23(float)       ExtInst 2(GLSL.std.450) 46(FMix) 390 392 61
+             394:    329(ptr)       AccessChain 325(gl_TessLevelInner) 118
+                                    Store 394 393
+                                    Branch 350
+             395:                   Label
+             396:    329(ptr)       AccessChain 325(gl_TessLevelInner) 129
+                                    Store 396 201
+             397:    329(ptr)       AccessChain 325(gl_TessLevelInner) 118
+                                    Store 397 201
+             398:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 129
+                                    Store 398 201
+             399:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 118
+                                    Store 399 201
+             400:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 341
+                                    Store 400 201
+             401:    329(ptr)       AccessChain 335(gl_TessLevelOuter) 290
+                                    Store 401 201
+                                    Branch 350
+             350:                 Label
+                                  Branch 321
+             321:               Label
+                                Branch 315
+             315:             Label
+             418:    115(int) Load 234(gl_InvocationID)
+             419:    115(int) Load 234(gl_InvocationID)
+             420:    238(ptr) AccessChain 230(gl_in) 419 129
+             421:   26(fvec4) Load 420
+             423:    422(ptr) AccessChain 415(gl_out) 418 129
+                              Store 423 421
+             431:    115(int) Load 234(gl_InvocationID)
+             438:    115(int) Load 234(gl_InvocationID)
+             440:    439(ptr) AccessChain 435(inNormal) 438
+             441:  134(fvec3) Load 440
+             443:    442(ptr) AccessChain 427(outNormal) 431
+                              Store 443 441
+             451:    115(int) Load 234(gl_InvocationID)
+             452:    115(int) Load 234(gl_InvocationID)
+             453:    262(ptr) AccessChain 259(inUV) 452
+             454:   87(fvec2) Load 453
+             456:    455(ptr) AccessChain 447(outUV) 451
+                              Store 456 454
+                              Return
+                              FunctionEnd
+33(screenSpaceTessFactor(vf4;vf4;):   23(float) Function None 29
+          31(p0):     28(ptr) FunctionParameter
+          32(p1):     28(ptr) FunctionParameter
+              36:             Label
+    56(midPoint):     28(ptr) Variable Function
+      67(radius):     66(ptr) Variable Function
+          77(v0):     28(ptr) Variable Function
+      124(clip0):     28(ptr) Variable Function
+      144(clip1):     28(ptr) Variable Function
+              37:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 35
+              38:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 16 11 11 11 11
+              41:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 39 31(p0) 42
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 43 32(p1) 42
+              55:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 35 33(screenSpaceTessFactor(vf4;vf4;)
+              60:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 57 56(midPoint) 42
+              62:   26(fvec4) Load 31(p0)
+              63:   26(fvec4) Load 32(p1)
+              64:   26(fvec4) FAdd 62 63
+              65:   26(fvec4) VectorTimesScalar 64 61
+                              Store 56(midPoint) 65
+              71:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 68 67(radius) 42
+              72:   26(fvec4) Load 31(p0)
+              73:   26(fvec4) Load 32(p1)
+              74:   23(float) ExtInst 2(GLSL.std.450) 67(Distance) 72 73
+              76:   23(float) FDiv 74 75
+                              Store 67(radius) 76
+              81:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 78 77(v0) 42
+             120:    119(ptr) AccessChain 112(ubo) 118
+             121:          82 Load 120
+             122:   26(fvec4) Load 56(midPoint)
+             123:   26(fvec4) MatrixTimesVector 121 122
+                              Store 77(v0) 123
+             128:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 125 124(clip0) 42
+             130:    119(ptr) AccessChain 112(ubo) 129
+             131:          82 Load 130
+             132:   26(fvec4) Load 77(v0)
+             133:   23(float) Load 67(radius)
+             138:   23(float) CompositeExtract 137 0
+             139:   23(float) CompositeExtract 137 1
+             140:   23(float) CompositeExtract 137 2
+             141:   26(fvec4) CompositeConstruct 133 138 139 140
+             142:   26(fvec4) FSub 132 141
+             143:   26(fvec4) MatrixTimesVector 131 142
+                              Store 124(clip0) 143
+             148:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 145 144(clip1) 42
+             149:    119(ptr) AccessChain 112(ubo) 129
+             150:          82 Load 149
+             151:   26(fvec4) Load 77(v0)
+             152:   23(float) Load 67(radius)
+             153:   23(float) CompositeExtract 137 0
+             154:   23(float) CompositeExtract 137 1
+             155:   23(float) CompositeExtract 137 2
+             156:   26(fvec4) CompositeConstruct 152 153 154 155
+             157:   26(fvec4) FAdd 151 156
+             158:   26(fvec4) MatrixTimesVector 150 157
+                              Store 144(clip1) 158
+             159:     66(ptr) AccessChain 124(clip0) 12
+             160:   23(float) Load 159
+             161:   26(fvec4) Load 124(clip0)
+             162:   26(fvec4) CompositeConstruct 160 160 160 160
+             163:   26(fvec4) FDiv 161 162
+                              Store 124(clip0) 163
+             164:     66(ptr) AccessChain 144(clip1) 12
+             165:   23(float) Load 164
+             166:   26(fvec4) Load 144(clip1)
+             167:   26(fvec4) CompositeConstruct 165 165 165 165
+             168:   26(fvec4) FDiv 166 167
+                              Store 144(clip1) 168
+             171:    170(ptr) AccessChain 112(ubo) 169
+             172:   87(fvec2) Load 171
+             173:   26(fvec4) Load 124(clip0)
+             174:   87(fvec2) VectorShuffle 173 173 0 1
+             175:   87(fvec2) FMul 174 172
+             176:     66(ptr) AccessChain 124(clip0) 11
+             177:   23(float) CompositeExtract 175 0
+                              Store 176 177
+             178:     66(ptr) AccessChain 124(clip0) 19
+             179:   23(float) CompositeExtract 175 1
+                              Store 178 179
+             180:    170(ptr) AccessChain 112(ubo) 169
+             181:   87(fvec2) Load 180
+             182:   26(fvec4) Load 144(clip1)
+             183:   87(fvec2) VectorShuffle 182 182 0 1
+             184:   87(fvec2) FMul 183 181
+             185:     66(ptr) AccessChain 144(clip1) 11
+             186:   23(float) CompositeExtract 184 0
+                              Store 185 186
+             187:     66(ptr) AccessChain 144(clip1) 19
+             188:   23(float) CompositeExtract 184 1
+                              Store 187 188
+             189:   26(fvec4) Load 124(clip0)
+             190:   26(fvec4) Load 144(clip1)
+             191:   23(float) ExtInst 2(GLSL.std.450) 67(Distance) 189 190
+             194:    193(ptr) AccessChain 112(ubo) 192
+             195:   23(float) Load 194
+             196:   23(float) FDiv 191 195
+             198:    193(ptr) AccessChain 112(ubo) 197
+             199:   23(float) Load 198
+             200:   23(float) FMul 196 199
+             203:   23(float) ExtInst 2(GLSL.std.450) 43(FClamp) 200 201 202
+                              ReturnValue 203
+                              FunctionEnd
+51(frustumCheck():    46(bool) Function None 49
+              54:             Label
+        207(pos):     28(ptr) Variable Function
+          276(i):    275(ptr) Variable Function
+             206:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 53 51(frustumCheck()
+             211:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 208 207(pos) 42
+             237:    115(int) Load 234(gl_InvocationID)
+             239:    238(ptr) AccessChain 230(gl_in) 237 129
+             240:   26(fvec4) Load 239
+                              Store 207(pos) 240
+             255:         247 Load 252(samplerHeight)
+             263:    262(ptr) AccessChain 259(inUV) 129
+             264:   87(fvec2) Load 263
+             265:   26(fvec4) ImageSampleExplicitLod 255 264 Lod 136
+             266:   23(float) CompositeExtract 265 0
+             268:    193(ptr) AccessChain 112(ubo) 267
+             269:   23(float) Load 268
+             270:   23(float) FMul 266 269
+             271:     66(ptr) AccessChain 207(pos) 19
+             272:   23(float) Load 271
+             273:   23(float) FSub 272 270
+             274:     66(ptr) AccessChain 207(pos) 19
+                              Store 274 273
+             280:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 277 276(i) 42
+                              Store 276(i) 129
+                              Branch 281
+             281:             Label
+                              LoopMerge 283 284 None
+                              Branch 285
+             285:             Label
+             286:    115(int) Load 276(i)
+             288:    46(bool) SLessThan 286 169
+                              BranchConditional 288 282 283
+             282:               Label
+             289:   26(fvec4)   Load 207(pos)
+             291:    115(int)   Load 276(i)
+             293:    292(ptr)   AccessChain 112(ubo) 290 291
+             294:   26(fvec4)   Load 293
+             295:   23(float)   Dot 289 294
+             297:   23(float)   FAdd 295 296
+             299:    46(bool)   FOrdLessThan 297 136
+                                SelectionMerge 301 None
+                                BranchConditional 299 300 301
+             300:                 Label
+                                  ReturnValue 303
+             301:               Label
+                                Branch 284
+             284:               Label
+             305:    115(int)   Load 276(i)
+             306:    115(int)   IAdd 305 118
+                                Store 276(i) 306
+                                Branch 281
+             283:             Label
+                              ReturnValue 84
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.tese.out b/Test/baseResults/spv.debuginfo.glsl.tese.out
new file mode 100644
index 0000000..d9d9681
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.glsl.tese.out
@@ -0,0 +1,421 @@
+spv.debuginfo.glsl.tese
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 315
+
+                              Capability Tessellation
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationEvaluation 13  "main" 39 56 80 99 124 160 267 279 286 297 303
+                              ExecutionMode 13 Quads
+                              ExecutionMode 13 SpacingEqual
+                              ExecutionMode 13 VertexOrderCw
+               8:             String  "uint"
+              14:             String  "main"
+              17:             String  ""
+              25:             String  "float"
+              32:             String  "uv1"
+              41:             String  "inUV"
+              44:             String  "int"
+              58:             String  "gl_TessCoord"
+              66:             String  "uv2"
+              82:             String  "outUV"
+              93:             String  "n1"
+             101:             String  "inNormal"
+             112:             String  "n2"
+             126:             String  "outNormal"
+             139:             String  "pos1"
+             146:             String  "gl_Position"
+             149:             String  "gl_PointSize"
+             152:             String  "gl_CullDistance"
+             156:             String  "gl_PerVertex"
+             162:             String  "gl_in"
+             174:             String  "pos2"
+             187:             String  "pos"
+             198:             String  "type.2d.image"
+             200:             String  "@type.2d.image"
+             204:             String  "type.sampled.image"
+             205:             String  "@type.sampled.image"
+             209:             String  "displacementMap"
+             223:             String  "modelview"
+             228:             String  "lightPos"
+             231:             String  "frustumPlanes"
+             233:             String  "tessellatedEdgeSize"
+             237:             String  "viewportDim"
+             241:             String  "UBO"
+             245:             String  "ubo"
+             281:             String  "outViewVec"
+             288:             String  "outLightVec"
+             299:             String  "outWorldPos"
+             305:             String  "outEyePos"
+                              Name 13  "main"
+                              Name 30  "uv1"
+                              Name 39  "inUV"
+                              Name 56  "gl_TessCoord"
+                              Name 64  "uv2"
+                              Name 80  "outUV"
+                              Name 91  "n1"
+                              Name 99  "inNormal"
+                              Name 110  "n2"
+                              Name 124  "outNormal"
+                              Name 137  "pos1"
+                              Name 144  "gl_PerVertex"
+                              MemberName 144(gl_PerVertex) 0  "gl_Position"
+                              MemberName 144(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 144(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 144(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 160  "gl_in"
+                              Name 172  "pos2"
+                              Name 185  "pos"
+                              Name 207  "displacementMap"
+                              Name 221  "UBO"
+                              MemberName 221(UBO) 0  "projection"
+                              MemberName 221(UBO) 1  "modelview"
+                              MemberName 221(UBO) 2  "lightPos"
+                              MemberName 221(UBO) 3  "frustumPlanes"
+                              MemberName 221(UBO) 4  "displacementFactor"
+                              MemberName 221(UBO) 5  "tessellationFactor"
+                              MemberName 221(UBO) 6  "viewportDim"
+                              MemberName 221(UBO) 7  "tessellatedEdgeSize"
+                              Name 243  "ubo"
+                              Name 256  "gl_PerVertex"
+                              MemberName 256(gl_PerVertex) 0  "gl_Position"
+                              MemberName 256(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 256(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 256(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 267  ""
+                              Name 279  "outViewVec"
+                              Name 286  "outLightVec"
+                              Name 297  "outWorldPos"
+                              Name 303  "outEyePos"
+                              Decorate 39(inUV) Location 1
+                              Decorate 56(gl_TessCoord) BuiltIn TessCoord
+                              Decorate 80(outUV) Location 1
+                              Decorate 99(inNormal) Location 0
+                              Decorate 124(outNormal) Location 0
+                              MemberDecorate 144(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 144(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 144(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 144(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 144(gl_PerVertex) Block
+                              Decorate 207(displacementMap) DescriptorSet 0
+                              Decorate 207(displacementMap) Binding 1
+                              Decorate 219 ArrayStride 16
+                              MemberDecorate 221(UBO) 0 ColMajor
+                              MemberDecorate 221(UBO) 0 Offset 0
+                              MemberDecorate 221(UBO) 0 MatrixStride 16
+                              MemberDecorate 221(UBO) 1 ColMajor
+                              MemberDecorate 221(UBO) 1 Offset 64
+                              MemberDecorate 221(UBO) 1 MatrixStride 16
+                              MemberDecorate 221(UBO) 2 Offset 128
+                              MemberDecorate 221(UBO) 3 Offset 144
+                              MemberDecorate 221(UBO) 4 Offset 240
+                              MemberDecorate 221(UBO) 5 Offset 244
+                              MemberDecorate 221(UBO) 6 Offset 248
+                              MemberDecorate 221(UBO) 7 Offset 256
+                              Decorate 221(UBO) Block
+                              Decorate 243(ubo) DescriptorSet 0
+                              Decorate 243(ubo) Binding 0
+                              MemberDecorate 256(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 256(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 256(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 256(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 256(gl_PerVertex) Block
+                              Decorate 279(outViewVec) Location 2
+                              Decorate 286(outLightVec) Location 3
+                              Decorate 297(outWorldPos) Location 5
+                              Decorate 303(outEyePos) Location 4
+               3:             TypeVoid
+               4:             TypeFunction 3
+               6:             TypeInt 32 0
+               9:      6(int) Constant 32
+              10:      6(int) Constant 6
+              11:      6(int) Constant 0
+               7:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 8 9 10 11
+              12:      6(int) Constant 3
+               5:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 3
+              16:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 17
+              19:      6(int) Constant 1
+              20:      6(int) Constant 4
+              21:      6(int) Constant 2
+              18:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 19 20 16 21
+              15:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 14 5 16 11 11 18 14 12 11
+              24:             TypeFloat 32
+              26:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 25 9 12 11
+              27:             TypeVector 24(float) 2
+              28:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 26 21
+              29:             TypePointer Function 27(fvec2)
+              33:      6(int) Constant 56
+              31:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 32 28 16 33 11 15 20
+              35:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              36:             TypeArray 27(fvec2) 9
+              37:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 28 9
+              38:             TypePointer Input 36
+        39(inUV):     38(ptr) Variable Input
+              42:      6(int) Constant 8
+              40:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 41 37 16 33 11 18 41 39(inUV) 42
+              43:             TypeInt 32 1
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 44 9 20 11
+              46:     43(int) Constant 0
+              47:             TypePointer Input 27(fvec2)
+              50:     43(int) Constant 1
+              53:             TypeVector 24(float) 3
+              54:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 26 12
+              55:             TypePointer Input 53(fvec3)
+56(gl_TessCoord):     55(ptr) Variable Input
+              57:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 58 54 16 33 11 18 58 56(gl_TessCoord) 42
+              59:             TypePointer Input 24(float)
+              67:      6(int) Constant 57
+              65:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 66 28 16 67 11 15 20
+              69:     43(int) Constant 3
+              72:     43(int) Constant 2
+              79:             TypePointer Output 27(fvec2)
+       80(outUV):     79(ptr) Variable Output
+              83:      6(int) Constant 58
+              81:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 82 28 16 83 11 18 82 80(outUV) 42
+              90:             TypePointer Function 53(fvec3)
+              94:      6(int) Constant 60
+              92:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 93 54 16 94 11 15 20
+              96:             TypeArray 53(fvec3) 9
+              97:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 54 9
+              98:             TypePointer Input 96
+    99(inNormal):     98(ptr) Variable Input
+             100:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 101 97 16 94 11 18 101 99(inNormal) 42
+             113:      6(int) Constant 61
+             111:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 112 54 16 113 11 15 20
+             123:             TypePointer Output 53(fvec3)
+  124(outNormal):    123(ptr) Variable Output
+             127:      6(int) Constant 62
+             125:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 126 54 16 127 11 18 126 124(outNormal) 42
+             134:             TypeVector 24(float) 4
+             135:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 26 20
+             136:             TypePointer Function 134(fvec4)
+             140:      6(int) Constant 65
+             138:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 139 135 16 140 11 15 20
+             142:             TypeArray 24(float) 19
+             143:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 26 19
+144(gl_PerVertex):             TypeStruct 134(fvec4) 24(float) 142 142
+             147:      6(int) Constant 1756
+             145:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 146 135 16 19 147 11 11 12
+             150:      6(int) Constant 1774
+             148:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 149 26 16 19 150 11 11 12
+             153:      6(int) Constant 1817
+             151:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 152 143 16 19 153 11 11 12
+             154:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 152 143 16 19 153 11 11 12
+             155:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 156 19 16 140 11 18 156 11 12 145 148 151 154
+             157:             TypeArray 144(gl_PerVertex) 9
+             158:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 155 9
+             159:             TypePointer Input 157
+      160(gl_in):    159(ptr) Variable Input
+             161:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 162 158 16 140 11 18 162 160(gl_in) 42
+             163:             TypePointer Input 134(fvec4)
+             175:      6(int) Constant 66
+             173:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 174 135 16 175 11 15 20
+             188:      6(int) Constant 67
+             186:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 187 135 16 188 11 15 20
+             196:             TypeImage 24(float) 2D sampled format:Unknown
+             199:      6(int) Constant 69
+             201:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(Unknown)
+             197:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 198 11 16 199 11 18 200 201 12
+             202:             TypeSampledImage 196
+             203:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 204 11 16 199 11 18 205 201 12
+             206:             TypePointer UniformConstant 202
+207(displacementMap):    206(ptr) Variable UniformConstant
+             208:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 209 203 16 199 11 18 209 207(displacementMap) 42
+             212:   24(float) Constant 0
+             215:             TypeMatrix 134(fvec4) 4
+             217:             TypeBool
+             218:   217(bool) ConstantTrue
+             216:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 135 20 218
+             219:             TypeArray 134(fvec4) 10
+             220:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 135 10
+        221(UBO):             TypeStruct 215 215 134(fvec4) 219 24(float) 24(float) 27(fvec2) 24(float)
+             224:      6(int) Constant 30
+             225:      6(int) Constant 7
+             222:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 223 216 16 224 225 11 11 12
+             226:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 223 216 16 224 225 11 11 12
+             229:      6(int) Constant 31
+             227:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 228 135 16 229 225 11 11 12
+             230:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 231 220 16 9 225 11 11 12
+             234:      6(int) Constant 36
+             232:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 233 26 16 234 42 11 11 12
+             235:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 233 26 16 234 42 11 11 12
+             238:      6(int) Constant 35
+             236:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 237 28 16 238 225 11 11 12
+             239:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 233 26 16 234 42 11 11 12
+             240:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 241 19 16 199 11 18 241 11 12 222 226 227 230 232 235 236 239
+             242:             TypePointer Uniform 221(UBO)
+        243(ubo):    242(ptr) Variable Uniform
+             244:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 245 240 16 199 11 18 245 243(ubo) 42
+             246:     43(int) Constant 4
+             247:             TypePointer Uniform 24(float)
+             251:             TypePointer Function 24(float)
+256(gl_PerVertex):             TypeStruct 134(fvec4) 24(float) 142 142
+             258:      6(int) Constant 165
+             257:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 146 135 16 19 258 11 11 12
+             260:      6(int) Constant 183
+             259:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 149 26 16 19 260 11 11 12
+             262:      6(int) Constant 226
+             261:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 152 143 16 19 262 11 11 12
+             263:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 152 143 16 19 262 11 11 12
+             265:      6(int) Constant 71
+             264:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 156 19 16 265 11 18 156 11 12 257 259 261 263
+             266:             TypePointer Output 256(gl_PerVertex)
+             267:    266(ptr) Variable Output
+             268:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 17 264 16 265 11 18 17 267 42
+             269:             TypePointer Uniform 215
+             277:             TypePointer Output 134(fvec4)
+ 279(outViewVec):    123(ptr) Variable Output
+             282:      6(int) Constant 74
+             280:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 281 54 16 282 11 18 281 279(outViewVec) 42
+286(outLightVec):    123(ptr) Variable Output
+             289:      6(int) Constant 75
+             287:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 288 54 16 289 11 18 288 286(outLightVec) 42
+             290:             TypePointer Uniform 134(fvec4)
+297(outWorldPos):    123(ptr) Variable Output
+             300:      6(int) Constant 76
+             298:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 299 54 16 300 11 18 299 297(outWorldPos) 42
+  303(outEyePos):    123(ptr) Variable Output
+             306:      6(int) Constant 77
+             304:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 305 54 16 306 11 18 305 303(outEyePos) 42
+        13(main):           3 Function None 4
+              22:             Label
+         30(uv1):     29(ptr) Variable Function
+         64(uv2):     29(ptr) Variable Function
+          91(n1):     90(ptr) Variable Function
+         110(n2):     90(ptr) Variable Function
+       137(pos1):    136(ptr) Variable Function
+       172(pos2):    136(ptr) Variable Function
+        185(pos):    136(ptr) Variable Function
+              23:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 15 13(main)
+              34:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 31 30(uv1) 35
+              48:     47(ptr) AccessChain 39(inUV) 46
+              49:   27(fvec2) Load 48
+              51:     47(ptr) AccessChain 39(inUV) 50
+              52:   27(fvec2) Load 51
+              60:     59(ptr) AccessChain 56(gl_TessCoord) 11
+              61:   24(float) Load 60
+              62:   27(fvec2) CompositeConstruct 61 61
+              63:   27(fvec2) ExtInst 2(GLSL.std.450) 46(FMix) 49 52 62
+                              Store 30(uv1) 63
+              68:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 65 64(uv2) 35
+              70:     47(ptr) AccessChain 39(inUV) 69
+              71:   27(fvec2) Load 70
+              73:     47(ptr) AccessChain 39(inUV) 72
+              74:   27(fvec2) Load 73
+              75:     59(ptr) AccessChain 56(gl_TessCoord) 11
+              76:   24(float) Load 75
+              77:   27(fvec2) CompositeConstruct 76 76
+              78:   27(fvec2) ExtInst 2(GLSL.std.450) 46(FMix) 71 74 77
+                              Store 64(uv2) 78
+              84:   27(fvec2) Load 30(uv1)
+              85:   27(fvec2) Load 64(uv2)
+              86:     59(ptr) AccessChain 56(gl_TessCoord) 19
+              87:   24(float) Load 86
+              88:   27(fvec2) CompositeConstruct 87 87
+              89:   27(fvec2) ExtInst 2(GLSL.std.450) 46(FMix) 84 85 88
+                              Store 80(outUV) 89
+              95:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 92 91(n1) 35
+             102:     55(ptr) AccessChain 99(inNormal) 46
+             103:   53(fvec3) Load 102
+             104:     55(ptr) AccessChain 99(inNormal) 50
+             105:   53(fvec3) Load 104
+             106:     59(ptr) AccessChain 56(gl_TessCoord) 11
+             107:   24(float) Load 106
+             108:   53(fvec3) CompositeConstruct 107 107 107
+             109:   53(fvec3) ExtInst 2(GLSL.std.450) 46(FMix) 103 105 108
+                              Store 91(n1) 109
+             114:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 111 110(n2) 35
+             115:     55(ptr) AccessChain 99(inNormal) 69
+             116:   53(fvec3) Load 115
+             117:     55(ptr) AccessChain 99(inNormal) 72
+             118:   53(fvec3) Load 117
+             119:     59(ptr) AccessChain 56(gl_TessCoord) 11
+             120:   24(float) Load 119
+             121:   53(fvec3) CompositeConstruct 120 120 120
+             122:   53(fvec3) ExtInst 2(GLSL.std.450) 46(FMix) 116 118 121
+                              Store 110(n2) 122
+             128:   53(fvec3) Load 91(n1)
+             129:   53(fvec3) Load 110(n2)
+             130:     59(ptr) AccessChain 56(gl_TessCoord) 19
+             131:   24(float) Load 130
+             132:   53(fvec3) CompositeConstruct 131 131 131
+             133:   53(fvec3) ExtInst 2(GLSL.std.450) 46(FMix) 128 129 132
+                              Store 124(outNormal) 133
+             141:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 138 137(pos1) 35
+             164:    163(ptr) AccessChain 160(gl_in) 46 46
+             165:  134(fvec4) Load 164
+             166:    163(ptr) AccessChain 160(gl_in) 50 46
+             167:  134(fvec4) Load 166
+             168:     59(ptr) AccessChain 56(gl_TessCoord) 11
+             169:   24(float) Load 168
+             170:  134(fvec4) CompositeConstruct 169 169 169 169
+             171:  134(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 165 167 170
+                              Store 137(pos1) 171
+             176:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 173 172(pos2) 35
+             177:    163(ptr) AccessChain 160(gl_in) 69 46
+             178:  134(fvec4) Load 177
+             179:    163(ptr) AccessChain 160(gl_in) 72 46
+             180:  134(fvec4) Load 179
+             181:     59(ptr) AccessChain 56(gl_TessCoord) 11
+             182:   24(float) Load 181
+             183:  134(fvec4) CompositeConstruct 182 182 182 182
+             184:  134(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 178 180 183
+                              Store 172(pos2) 184
+             189:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 186 185(pos) 35
+             190:  134(fvec4) Load 137(pos1)
+             191:  134(fvec4) Load 172(pos2)
+             192:     59(ptr) AccessChain 56(gl_TessCoord) 19
+             193:   24(float) Load 192
+             194:  134(fvec4) CompositeConstruct 193 193 193 193
+             195:  134(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 190 191 194
+                              Store 185(pos) 195
+             210:         202 Load 207(displacementMap)
+             211:   27(fvec2) Load 80(outUV)
+             213:  134(fvec4) ImageSampleExplicitLod 210 211 Lod 212
+             214:   24(float) CompositeExtract 213 0
+             248:    247(ptr) AccessChain 243(ubo) 246
+             249:   24(float) Load 248
+             250:   24(float) FMul 214 249
+             252:    251(ptr) AccessChain 185(pos) 19
+             253:   24(float) Load 252
+             254:   24(float) FSub 253 250
+             255:    251(ptr) AccessChain 185(pos) 19
+                              Store 255 254
+             270:    269(ptr) AccessChain 243(ubo) 46
+             271:         215 Load 270
+             272:    269(ptr) AccessChain 243(ubo) 50
+             273:         215 Load 272
+             274:         215 MatrixTimesMatrix 271 273
+             275:  134(fvec4) Load 185(pos)
+             276:  134(fvec4) MatrixTimesVector 274 275
+             278:    277(ptr) AccessChain 267 46
+                              Store 278 276
+             283:  134(fvec4) Load 185(pos)
+             284:   53(fvec3) VectorShuffle 283 283 0 1 2
+             285:   53(fvec3) FNegate 284
+                              Store 279(outViewVec) 285
+             291:    290(ptr) AccessChain 243(ubo) 72
+             292:  134(fvec4) Load 291
+             293:   53(fvec3) VectorShuffle 292 292 0 1 2
+             294:   53(fvec3) Load 279(outViewVec)
+             295:   53(fvec3) FAdd 293 294
+             296:   53(fvec3) ExtInst 2(GLSL.std.450) 69(Normalize) 295
+                              Store 286(outLightVec) 296
+             301:  134(fvec4) Load 185(pos)
+             302:   53(fvec3) VectorShuffle 301 301 0 1 2
+                              Store 297(outWorldPos) 302
+             307:    269(ptr) AccessChain 243(ubo) 50
+             308:         215 Load 307
+             309:  134(fvec4) Load 185(pos)
+             310:  134(fvec4) MatrixTimesVector 308 309
+             311:   24(float) CompositeExtract 310 0
+             312:   24(float) CompositeExtract 310 1
+             313:   24(float) CompositeExtract 310 2
+             314:   53(fvec3) CompositeConstruct 311 312 313
+                              Store 303(outEyePos) 314
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.vert.out b/Test/baseResults/spv.debuginfo.glsl.vert.out
new file mode 100644
index 0000000..3d5352f
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.glsl.vert.out
@@ -0,0 +1,484 @@
+spv.debuginfo.glsl.vert
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 374
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 13  "main" 30 36 40 47 55 70 247 264 269 293 307 325 359 367
+               8:             String  "uint"
+              14:             String  "main"
+              17:             String  ""
+              25:             String  "float"
+              32:             String  "outColor"
+              38:             String  "inColor"
+              42:             String  "outUV"
+              49:             String  "inUV"
+              52:             String  "int"
+              57:             String  "instanceTexIndex"
+              66:             String  "s"
+              72:             String  "instanceRot"
+              84:             String  "modelview"
+              89:             String  "lightPos"
+              92:             String  "globSpeed"
+              96:             String  "UBO"
+             100:             String  "ubo"
+             109:             String  "c"
+             123:             String  "mx"
+             157:             String  "my"
+             185:             String  "mz"
+             201:             String  "rotMat"
+             225:             String  "gRotMat"
+             244:             String  "locPos"
+             249:             String  "inPos"
+             259:             String  "pos"
+             266:             String  "instanceScale"
+             271:             String  "instancePos"
+             282:             String  "gl_Position"
+             285:             String  "gl_PointSize"
+             287:             String  "gl_CullDistance"
+             290:             String  "gl_PerVertex"
+             309:             String  "outNormal"
+             327:             String  "inNormal"
+             342:             String  "lPos"
+             361:             String  "outLightVec"
+             369:             String  "outViewVec"
+                              Name 13  "main"
+                              Name 30  "outColor"
+                              Name 36  "inColor"
+                              Name 40  "outUV"
+                              Name 47  "inUV"
+                              Name 55  "instanceTexIndex"
+                              Name 64  "s"
+                              Name 70  "instanceRot"
+                              Name 82  "UBO"
+                              MemberName 82(UBO) 0  "projection"
+                              MemberName 82(UBO) 1  "modelview"
+                              MemberName 82(UBO) 2  "lightPos"
+                              MemberName 82(UBO) 3  "locSpeed"
+                              MemberName 82(UBO) 4  "globSpeed"
+                              Name 98  "ubo"
+                              Name 107  "c"
+                              Name 121  "mx"
+                              Name 155  "my"
+                              Name 183  "mz"
+                              Name 199  "rotMat"
+                              Name 223  "gRotMat"
+                              Name 242  "locPos"
+                              Name 247  "inPos"
+                              Name 257  "pos"
+                              Name 264  "instanceScale"
+                              Name 269  "instancePos"
+                              Name 280  "gl_PerVertex"
+                              MemberName 280(gl_PerVertex) 0  "gl_Position"
+                              MemberName 280(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 280(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 280(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 293  ""
+                              Name 307  "outNormal"
+                              Name 325  "inNormal"
+                              Name 340  "lPos"
+                              Name 359  "outLightVec"
+                              Name 367  "outViewVec"
+                              Decorate 30(outColor) Location 1
+                              Decorate 36(inColor) Location 3
+                              Decorate 40(outUV) Location 2
+                              Decorate 47(inUV) Location 2
+                              Decorate 55(instanceTexIndex) Location 7
+                              Decorate 70(instanceRot) Location 5
+                              MemberDecorate 82(UBO) 0 ColMajor
+                              MemberDecorate 82(UBO) 0 Offset 0
+                              MemberDecorate 82(UBO) 0 MatrixStride 16
+                              MemberDecorate 82(UBO) 1 ColMajor
+                              MemberDecorate 82(UBO) 1 Offset 64
+                              MemberDecorate 82(UBO) 1 MatrixStride 16
+                              MemberDecorate 82(UBO) 2 Offset 128
+                              MemberDecorate 82(UBO) 3 Offset 144
+                              MemberDecorate 82(UBO) 4 Offset 148
+                              Decorate 82(UBO) Block
+                              Decorate 98(ubo) DescriptorSet 0
+                              Decorate 98(ubo) Binding 0
+                              Decorate 247(inPos) Location 0
+                              Decorate 264(instanceScale) Location 6
+                              Decorate 269(instancePos) Location 4
+                              MemberDecorate 280(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 280(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 280(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 280(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 280(gl_PerVertex) Block
+                              Decorate 307(outNormal) Location 0
+                              Decorate 325(inNormal) Location 1
+                              Decorate 359(outLightVec) Location 4
+                              Decorate 367(outViewVec) Location 3
+               3:             TypeVoid
+               4:             TypeFunction 3
+               6:             TypeInt 32 0
+               9:      6(int) Constant 32
+              10:      6(int) Constant 6
+              11:      6(int) Constant 0
+               7:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 8 9 10 11
+              12:      6(int) Constant 3
+               5:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 3
+              16:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 17
+              19:      6(int) Constant 1
+              20:      6(int) Constant 4
+              21:      6(int) Constant 2
+              18:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 19 20 16 21
+              15:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 14 5 16 11 11 18 14 12 11
+              24:             TypeFloat 32
+              26:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 25 9 12 11
+              27:             TypeVector 24(float) 3
+              28:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 26 12
+              29:             TypePointer Output 27(fvec3)
+    30(outColor):     29(ptr) Variable Output
+              33:      6(int) Constant 56
+              34:      6(int) Constant 8
+              31:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 32 28 16 33 11 18 32 30(outColor) 34
+              35:             TypePointer Input 27(fvec3)
+     36(inColor):     35(ptr) Variable Input
+              37:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 38 28 16 33 11 18 38 36(inColor) 34
+       40(outUV):     29(ptr) Variable Output
+              43:      6(int) Constant 57
+              41:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 42 28 16 43 11 18 42 40(outUV) 34
+              44:             TypeVector 24(float) 2
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 26 21
+              46:             TypePointer Input 44(fvec2)
+        47(inUV):     46(ptr) Variable Input
+              48:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 49 45 16 43 11 18 49 47(inUV) 34
+              51:             TypeInt 32 1
+              53:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 52 9 20 11
+              54:             TypePointer Input 51(int)
+55(instanceTexIndex):     54(ptr) Variable Input
+              56:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 57 53 16 43 11 18 57 55(instanceTexIndex) 34
+              63:             TypePointer Function 24(float)
+              67:      6(int) Constant 62
+              65:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 66 26 16 67 11 15 20
+              69:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+ 70(instanceRot):     35(ptr) Variable Input
+              71:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 72 28 16 67 11 18 72 70(instanceRot) 34
+              73:             TypePointer Input 24(float)
+              76:             TypeVector 24(float) 4
+              77:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 26 20
+              78:             TypeMatrix 76(fvec4) 4
+              80:             TypeBool
+              81:    80(bool) ConstantTrue
+              79:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 77 20 81
+         82(UBO):             TypeStruct 78 78 76(fvec4) 24(float) 24(float)
+              85:      6(int) Constant 42
+              86:      6(int) Constant 7
+              83:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 79 16 85 86 11 11 12
+              87:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 79 16 85 86 11 11 12
+              90:      6(int) Constant 43
+              88:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 89 77 16 90 86 11 11 12
+              93:      6(int) Constant 45
+              91:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 92 26 16 93 34 11 11 12
+              94:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 92 26 16 93 34 11 11 12
+              95:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 96 19 16 67 11 18 96 11 12 83 87 88 91 94
+              97:             TypePointer Uniform 82(UBO)
+         98(ubo):     97(ptr) Variable Uniform
+              99:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 100 95 16 67 11 18 100 98(ubo) 34
+             101:     51(int) Constant 3
+             102:             TypePointer Uniform 24(float)
+             110:      6(int) Constant 63
+             108:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 109 26 16 110 11 15 20
+             118:             TypeMatrix 27(fvec3) 3
+             119:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 28 12 81
+             120:             TypePointer Function 118
+             124:      6(int) Constant 65
+             122:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 123 119 16 124 11 15 20
+             126:     51(int) Constant 0
+             129:   24(float) Constant 0
+             131:             TypePointer Function 27(fvec3)
+             133:     51(int) Constant 1
+             139:     51(int) Constant 2
+             140:   24(float) Constant 1065353216
+             141:   27(fvec3) ConstantComposite 129 129 140
+             158:      6(int) Constant 73
+             156:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 157 119 16 158 11 15 20
+             164:   27(fvec3) ConstantComposite 129 140 129
+             186:      6(int) Constant 81
+             184:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 185 119 16 186 11 15 20
+             188:   27(fvec3) ConstantComposite 140 129 129
+             202:      6(int) Constant 85
+             200:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 201 119 16 202 11 15 20
+             211:     51(int) Constant 4
+             222:             TypePointer Function 78
+             226:      6(int) Constant 90
+             224:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 225 79 16 226 11 15 20
+             231:             TypePointer Function 76(fvec4)
+             233:   76(fvec4) ConstantComposite 129 140 129 129
+             240:   76(fvec4) ConstantComposite 129 129 129 140
+             245:      6(int) Constant 95
+             243:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 244 77 16 245 11 15 20
+      247(inPos):     35(ptr) Variable Input
+             248:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 249 28 16 245 11 18 249 247(inPos) 34
+             260:      6(int) Constant 96
+             258:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 259 77 16 260 11 15 20
+264(instanceScale):     73(ptr) Variable Input
+             265:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 266 26 16 260 11 18 266 264(instanceScale) 34
+269(instancePos):     35(ptr) Variable Input
+             270:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 271 28 16 260 11 18 271 269(instancePos) 34
+             278:             TypeArray 24(float) 19
+             279:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 26 19
+280(gl_PerVertex):             TypeStruct 76(fvec4) 24(float) 278 278
+             283:      6(int) Constant 24
+             281:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 282 77 16 19 283 11 11 12
+             284:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 285 26 16 19 85 11 11 12
+             286:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 287 279 16 19 202 11 11 12
+             288:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 287 279 16 19 202 11 11 12
+             291:      6(int) Constant 98
+             289:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 290 19 16 291 11 18 290 11 12 281 284 286 288
+             292:             TypePointer Output 280(gl_PerVertex)
+             293:    292(ptr) Variable Output
+             294:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 17 289 16 291 11 18 17 293 34
+             295:             TypePointer Uniform 78
+             305:             TypePointer Output 76(fvec4)
+  307(outNormal):     29(ptr) Variable Output
+             310:      6(int) Constant 99
+             308:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 309 28 16 310 11 18 309 307(outNormal) 34
+   325(inNormal):     35(ptr) Variable Input
+             326:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 327 28 16 310 11 18 327 325(inNormal) 34
+             343:      6(int) Constant 102
+             341:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 342 28 16 343 11 15 20
+             354:             TypePointer Uniform 76(fvec4)
+359(outLightVec):     29(ptr) Variable Output
+             362:      6(int) Constant 103
+             360:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 361 28 16 362 11 18 361 359(outLightVec) 34
+ 367(outViewVec):     29(ptr) Variable Output
+             370:      6(int) Constant 104
+             368:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 369 28 16 370 11 18 369 367(outViewVec) 34
+        13(main):           3 Function None 4
+              22:             Label
+           64(s):     63(ptr) Variable Function
+          107(c):     63(ptr) Variable Function
+         121(mx):    120(ptr) Variable Function
+         155(my):    120(ptr) Variable Function
+         183(mz):    120(ptr) Variable Function
+     199(rotMat):    120(ptr) Variable Function
+    223(gRotMat):    222(ptr) Variable Function
+     242(locPos):    231(ptr) Variable Function
+        257(pos):    231(ptr) Variable Function
+       340(lPos):    131(ptr) Variable Function
+              23:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 15 13(main)
+              39:   27(fvec3) Load 36(inColor)
+                              Store 30(outColor) 39
+              50:   44(fvec2) Load 47(inUV)
+              58:     51(int) Load 55(instanceTexIndex)
+              59:   24(float) ConvertSToF 58
+              60:   24(float) CompositeExtract 50 0
+              61:   24(float) CompositeExtract 50 1
+              62:   27(fvec3) CompositeConstruct 60 61 59
+                              Store 40(outUV) 62
+              68:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 65 64(s) 69
+              74:     73(ptr) AccessChain 70(instanceRot) 11
+              75:   24(float) Load 74
+             103:    102(ptr) AccessChain 98(ubo) 101
+             104:   24(float) Load 103
+             105:   24(float) FAdd 75 104
+             106:   24(float) ExtInst 2(GLSL.std.450) 13(Sin) 105
+                              Store 64(s) 106
+             111:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 108 107(c) 69
+             112:     73(ptr) AccessChain 70(instanceRot) 11
+             113:   24(float) Load 112
+             114:    102(ptr) AccessChain 98(ubo) 101
+             115:   24(float) Load 114
+             116:   24(float) FAdd 113 115
+             117:   24(float) ExtInst 2(GLSL.std.450) 14(Cos) 116
+                              Store 107(c) 117
+             125:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 122 121(mx) 69
+             127:   24(float) Load 107(c)
+             128:   24(float) Load 64(s)
+             130:   27(fvec3) CompositeConstruct 127 128 129
+             132:    131(ptr) AccessChain 121(mx) 126
+                              Store 132 130
+             134:   24(float) Load 64(s)
+             135:   24(float) FNegate 134
+             136:   24(float) Load 107(c)
+             137:   27(fvec3) CompositeConstruct 135 136 129
+             138:    131(ptr) AccessChain 121(mx) 133
+                              Store 138 137
+             142:    131(ptr) AccessChain 121(mx) 139
+                              Store 142 141
+             143:     73(ptr) AccessChain 70(instanceRot) 19
+             144:   24(float) Load 143
+             145:    102(ptr) AccessChain 98(ubo) 101
+             146:   24(float) Load 145
+             147:   24(float) FAdd 144 146
+             148:   24(float) ExtInst 2(GLSL.std.450) 13(Sin) 147
+                              Store 64(s) 148
+             149:     73(ptr) AccessChain 70(instanceRot) 19
+             150:   24(float) Load 149
+             151:    102(ptr) AccessChain 98(ubo) 101
+             152:   24(float) Load 151
+             153:   24(float) FAdd 150 152
+             154:   24(float) ExtInst 2(GLSL.std.450) 14(Cos) 153
+                              Store 107(c) 154
+             159:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 156 155(my) 69
+             160:   24(float) Load 107(c)
+             161:   24(float) Load 64(s)
+             162:   27(fvec3) CompositeConstruct 160 129 161
+             163:    131(ptr) AccessChain 155(my) 126
+                              Store 163 162
+             165:    131(ptr) AccessChain 155(my) 133
+                              Store 165 164
+             166:   24(float) Load 64(s)
+             167:   24(float) FNegate 166
+             168:   24(float) Load 107(c)
+             169:   27(fvec3) CompositeConstruct 167 129 168
+             170:    131(ptr) AccessChain 155(my) 139
+                              Store 170 169
+             171:     73(ptr) AccessChain 70(instanceRot) 21
+             172:   24(float) Load 171
+             173:    102(ptr) AccessChain 98(ubo) 101
+             174:   24(float) Load 173
+             175:   24(float) FAdd 172 174
+             176:   24(float) ExtInst 2(GLSL.std.450) 13(Sin) 175
+                              Store 64(s) 176
+             177:     73(ptr) AccessChain 70(instanceRot) 21
+             178:   24(float) Load 177
+             179:    102(ptr) AccessChain 98(ubo) 101
+             180:   24(float) Load 179
+             181:   24(float) FAdd 178 180
+             182:   24(float) ExtInst 2(GLSL.std.450) 14(Cos) 181
+                              Store 107(c) 182
+             187:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 184 183(mz) 69
+             189:    131(ptr) AccessChain 183(mz) 126
+                              Store 189 188
+             190:   24(float) Load 107(c)
+             191:   24(float) Load 64(s)
+             192:   27(fvec3) CompositeConstruct 129 190 191
+             193:    131(ptr) AccessChain 183(mz) 133
+                              Store 193 192
+             194:   24(float) Load 64(s)
+             195:   24(float) FNegate 194
+             196:   24(float) Load 107(c)
+             197:   27(fvec3) CompositeConstruct 129 195 196
+             198:    131(ptr) AccessChain 183(mz) 139
+                              Store 198 197
+             203:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 200 199(rotMat) 69
+             204:         118 Load 183(mz)
+             205:         118 Load 155(my)
+             206:         118 MatrixTimesMatrix 204 205
+             207:         118 Load 121(mx)
+             208:         118 MatrixTimesMatrix 206 207
+                              Store 199(rotMat) 208
+             209:     73(ptr) AccessChain 70(instanceRot) 19
+             210:   24(float) Load 209
+             212:    102(ptr) AccessChain 98(ubo) 211
+             213:   24(float) Load 212
+             214:   24(float) FAdd 210 213
+             215:   24(float) ExtInst 2(GLSL.std.450) 13(Sin) 214
+                              Store 64(s) 215
+             216:     73(ptr) AccessChain 70(instanceRot) 19
+             217:   24(float) Load 216
+             218:    102(ptr) AccessChain 98(ubo) 211
+             219:   24(float) Load 218
+             220:   24(float) FAdd 217 219
+             221:   24(float) ExtInst 2(GLSL.std.450) 14(Cos) 220
+                              Store 107(c) 221
+             227:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 224 223(gRotMat) 69
+             228:   24(float) Load 107(c)
+             229:   24(float) Load 64(s)
+             230:   76(fvec4) CompositeConstruct 228 129 229 129
+             232:    231(ptr) AccessChain 223(gRotMat) 126
+                              Store 232 230
+             234:    231(ptr) AccessChain 223(gRotMat) 133
+                              Store 234 233
+             235:   24(float) Load 64(s)
+             236:   24(float) FNegate 235
+             237:   24(float) Load 107(c)
+             238:   76(fvec4) CompositeConstruct 236 129 237 129
+             239:    231(ptr) AccessChain 223(gRotMat) 139
+                              Store 239 238
+             241:    231(ptr) AccessChain 223(gRotMat) 101
+                              Store 241 240
+             246:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 243 242(locPos) 69
+             250:   27(fvec3) Load 247(inPos)
+             251:         118 Load 199(rotMat)
+             252:   27(fvec3) VectorTimesMatrix 250 251
+             253:   24(float) CompositeExtract 252 0
+             254:   24(float) CompositeExtract 252 1
+             255:   24(float) CompositeExtract 252 2
+             256:   76(fvec4) CompositeConstruct 253 254 255 140
+                              Store 242(locPos) 256
+             261:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 258 257(pos) 69
+             262:   76(fvec4) Load 242(locPos)
+             263:   27(fvec3) VectorShuffle 262 262 0 1 2
+             267:   24(float) Load 264(instanceScale)
+             268:   27(fvec3) VectorTimesScalar 263 267
+             272:   27(fvec3) Load 269(instancePos)
+             273:   27(fvec3) FAdd 268 272
+             274:   24(float) CompositeExtract 273 0
+             275:   24(float) CompositeExtract 273 1
+             276:   24(float) CompositeExtract 273 2
+             277:   76(fvec4) CompositeConstruct 274 275 276 140
+                              Store 257(pos) 277
+             296:    295(ptr) AccessChain 98(ubo) 126
+             297:          78 Load 296
+             298:    295(ptr) AccessChain 98(ubo) 133
+             299:          78 Load 298
+             300:          78 MatrixTimesMatrix 297 299
+             301:          78 Load 223(gRotMat)
+             302:          78 MatrixTimesMatrix 300 301
+             303:   76(fvec4) Load 257(pos)
+             304:   76(fvec4) MatrixTimesVector 302 303
+             306:    305(ptr) AccessChain 293 126
+                              Store 306 304
+             311:    295(ptr) AccessChain 98(ubo) 133
+             312:          78 Load 311
+             313:          78 Load 223(gRotMat)
+             314:          78 MatrixTimesMatrix 312 313
+             315:   76(fvec4) CompositeExtract 314 0
+             316:   27(fvec3) VectorShuffle 315 315 0 1 2
+             317:   76(fvec4) CompositeExtract 314 1
+             318:   27(fvec3) VectorShuffle 317 317 0 1 2
+             319:   76(fvec4) CompositeExtract 314 2
+             320:   27(fvec3) VectorShuffle 319 319 0 1 2
+             321:         118 CompositeConstruct 316 318 320
+             322:         118 Load 199(rotMat)
+             323:         118 ExtInst 2(GLSL.std.450) 34(MatrixInverse) 322
+             324:         118 MatrixTimesMatrix 321 323
+             328:   27(fvec3) Load 325(inNormal)
+             329:   27(fvec3) MatrixTimesVector 324 328
+                              Store 307(outNormal) 329
+             330:    295(ptr) AccessChain 98(ubo) 133
+             331:          78 Load 330
+             332:   27(fvec3) Load 247(inPos)
+             333:   27(fvec3) Load 269(instancePos)
+             334:   27(fvec3) FAdd 332 333
+             335:   24(float) CompositeExtract 334 0
+             336:   24(float) CompositeExtract 334 1
+             337:   24(float) CompositeExtract 334 2
+             338:   76(fvec4) CompositeConstruct 335 336 337 140
+             339:   76(fvec4) MatrixTimesVector 331 338
+                              Store 257(pos) 339
+             344:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 341 340(lPos) 69
+             345:    295(ptr) AccessChain 98(ubo) 133
+             346:          78 Load 345
+             347:   76(fvec4) CompositeExtract 346 0
+             348:   27(fvec3) VectorShuffle 347 347 0 1 2
+             349:   76(fvec4) CompositeExtract 346 1
+             350:   27(fvec3) VectorShuffle 349 349 0 1 2
+             351:   76(fvec4) CompositeExtract 346 2
+             352:   27(fvec3) VectorShuffle 351 351 0 1 2
+             353:         118 CompositeConstruct 348 350 352
+             355:    354(ptr) AccessChain 98(ubo) 139
+             356:   76(fvec4) Load 355
+             357:   27(fvec3) VectorShuffle 356 356 0 1 2
+             358:   27(fvec3) MatrixTimesVector 353 357
+                              Store 340(lPos) 358
+             363:   27(fvec3) Load 340(lPos)
+             364:   76(fvec4) Load 257(pos)
+             365:   27(fvec3) VectorShuffle 364 364 0 1 2
+             366:   27(fvec3) FSub 363 365
+                              Store 359(outLightVec) 366
+             371:   76(fvec4) Load 257(pos)
+             372:   27(fvec3) VectorShuffle 371 371 0 1 2
+             373:   27(fvec3) FNegate 372
+                              Store 367(outViewVec) 373
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.comp.out b/Test/baseResults/spv.debuginfo.hlsl.comp.out
new file mode 100644
index 0000000..44bf1a7
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.hlsl.comp.out
@@ -0,0 +1,1081 @@
+spv.debuginfo.hlsl.comp
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 833
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 5  "main" 828
+                              ExecutionMode 5 LocalSize 10 10 1
+               9:             String  "float"
+              12:             String  "uint"
+              27:             String  "springForce"
+              30:             String  ""
+              39:             String  "p0"
+              43:             String  "p1"
+              47:             String  "restDist"
+              56:             String  "@main"
+              62:             String  "id"
+              67:             String  "dist"
+              78:             String  "int"
+              84:             String  "sphereRadius"
+              95:             String  "gravity"
+             100:             String  "particleCount"
+             103:             String  "UBO"
+             107:             String  "params"
+             111:             String  "ubo"
+             133:             String  "index"
+             155:             String  "bool"
+             163:             String  "normal"
+             170:             String  "pinned"
+             174:             String  "Particle"
+             180:             String  "@data"
+             184:             String  "particleIn"
+             203:             String  "particleOut"
+             222:             String  "force"
+             234:             String  "pos"
+             243:             String  "vel"
+             492:             String  "f"
+             536:             String  "sphereDist"
+             580:             String  "calculateNormals"
+             584:             String  "PushConstants"
+             588:             String  "pushConstants"
+             591:             String  "$Global"
+             621:             String  "a"
+             633:             String  "b"
+             649:             String  "c"
+                              Name 5  "main"
+                              Name 26  "springForce(vf3;vf3;f1;"
+                              Name 23  "p0"
+                              Name 24  "p1"
+                              Name 25  "restDist"
+                              Name 55  "@main(vu3;"
+                              Name 54  "id"
+                              Name 65  "dist"
+                              Name 82  "UBO"
+                              MemberName 82(UBO) 0  "deltaT"
+                              MemberName 82(UBO) 1  "particleMass"
+                              MemberName 82(UBO) 2  "springStiffness"
+                              MemberName 82(UBO) 3  "damping"
+                              MemberName 82(UBO) 4  "restDistH"
+                              MemberName 82(UBO) 5  "restDistV"
+                              MemberName 82(UBO) 6  "restDistD"
+                              MemberName 82(UBO) 7  "sphereRadius"
+                              MemberName 82(UBO) 8  "spherePos"
+                              MemberName 82(UBO) 9  "gravity"
+                              MemberName 82(UBO) 10  "particleCount"
+                              Name 105  "ubo"
+                              MemberName 105(ubo) 0  "params"
+                              Name 113  ""
+                              Name 131  "index"
+                              Name 161  "Particle"
+                              MemberName 161(Particle) 0  "pos"
+                              MemberName 161(Particle) 1  "vel"
+                              MemberName 161(Particle) 2  "uv"
+                              MemberName 161(Particle) 3  "normal"
+                              MemberName 161(Particle) 4  "pinned"
+                              Name 178  "particleIn"
+                              MemberName 178(particleIn) 0  "@data"
+                              Name 186  "particleIn"
+                              Name 199  "particleOut"
+                              MemberName 199(particleOut) 0  "@data"
+                              Name 206  "particleOut"
+                              Name 220  "force"
+                              Name 232  "pos"
+                              Name 241  "vel"
+                              Name 258  "param"
+                              Name 262  "param"
+                              Name 264  "param"
+                              Name 282  "param"
+                              Name 286  "param"
+                              Name 288  "param"
+                              Name 310  "param"
+                              Name 314  "param"
+                              Name 316  "param"
+                              Name 333  "param"
+                              Name 337  "param"
+                              Name 339  "param"
+                              Name 368  "param"
+                              Name 372  "param"
+                              Name 374  "param"
+                              Name 398  "param"
+                              Name 402  "param"
+                              Name 404  "param"
+                              Name 436  "param"
+                              Name 440  "param"
+                              Name 442  "param"
+                              Name 470  "param"
+                              Name 474  "param"
+                              Name 476  "param"
+                              Name 490  "f"
+                              Name 534  "sphereDist"
+                              Name 578  "PushConstants"
+                              MemberName 578(PushConstants) 0  "calculateNormals"
+                              Name 586  "$Global"
+                              MemberName 586($Global) 0  "pushConstants"
+                              Name 593  ""
+                              Name 602  "normal"
+                              Name 619  "a"
+                              Name 631  "b"
+                              Name 647  "c"
+                              Name 826  "id"
+                              Name 828  "id"
+                              Name 830  "param"
+                              MemberDecorate 82(UBO) 0 Offset 0
+                              MemberDecorate 82(UBO) 1 Offset 4
+                              MemberDecorate 82(UBO) 2 Offset 8
+                              MemberDecorate 82(UBO) 3 Offset 12
+                              MemberDecorate 82(UBO) 4 Offset 16
+                              MemberDecorate 82(UBO) 5 Offset 20
+                              MemberDecorate 82(UBO) 6 Offset 24
+                              MemberDecorate 82(UBO) 7 Offset 28
+                              MemberDecorate 82(UBO) 8 Offset 32
+                              MemberDecorate 82(UBO) 9 Offset 48
+                              MemberDecorate 82(UBO) 10 Offset 64
+                              MemberDecorate 105(ubo) 0 Offset 0
+                              Decorate 105(ubo) Block
+                              Decorate 113 DescriptorSet 0
+                              Decorate 113 Binding 2
+                              MemberDecorate 161(Particle) 0 Offset 0
+                              MemberDecorate 161(Particle) 1 Offset 16
+                              MemberDecorate 161(Particle) 2 Offset 32
+                              MemberDecorate 161(Particle) 3 Offset 48
+                              MemberDecorate 161(Particle) 4 Offset 64
+                              Decorate 176 ArrayStride 80
+                              MemberDecorate 178(particleIn) 0 NonWritable
+                              MemberDecorate 178(particleIn) 0 Offset 0
+                              Decorate 178(particleIn) BufferBlock
+                              Decorate 186(particleIn) DescriptorSet 0
+                              Decorate 186(particleIn) Binding 0
+                              Decorate 197 ArrayStride 80
+                              MemberDecorate 199(particleOut) 0 Offset 0
+                              Decorate 199(particleOut) BufferBlock
+                              Decorate 206(particleOut) DescriptorSet 0
+                              Decorate 206(particleOut) Binding 1
+                              MemberDecorate 578(PushConstants) 0 Offset 0
+                              MemberDecorate 586($Global) 0 Offset 0
+                              Decorate 586($Global) Block
+                              Decorate 593 DescriptorSet 0
+                              Decorate 593 Binding 3
+                              Decorate 828(id) BuiltIn GlobalInvocationId
+               3:             TypeVoid
+               4:             TypeFunction 3
+               7:             TypeFloat 32
+              10:             TypeInt 32 0
+              13:     10(int) Constant 32
+              14:     10(int) Constant 6
+              15:     10(int) Constant 0
+              11:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 12 13 14 15
+              16:     10(int) Constant 3
+               8:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 9 13 16 15
+              17:             TypeVector 7(float) 3
+              18:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 16
+              19:             TypePointer Function 17(fvec3)
+              20:             TypePointer Function 7(float)
+              21:             TypeFunction 17(fvec3) 19(ptr) 19(ptr) 20(ptr)
+              22:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 18 18 18 8
+              29:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 30
+              32:     10(int) Constant 1
+              33:     10(int) Constant 4
+              34:     10(int) Constant 5
+              31:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 32 33 29 34
+              28:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 27 22 29 15 15 31 27 16 15
+              38:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 39 18 29 15 15 28 33 32
+              41:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              44:     10(int) Constant 2
+              42:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 43 18 29 15 15 28 33 44
+              46:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 47 8 29 15 15 28 33 16
+              49:             TypeVector 10(int) 3
+              50:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 11 16
+              51:             TypePointer Function 49(ivec3)
+              52:             TypeFunction 3 51(ptr)
+              53:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 3 50
+              57:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 56 53 29 15 15 31 56 16 15
+              61:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 62 50 29 15 15 57 33 32
+              68:     10(int) Constant 76
+              66:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 67 18 29 68 15 28 33
+              75:             TypeVector 7(float) 4
+              76:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 33
+              77:             TypeInt 32 1
+              79:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 78 13 33 15
+              80:             TypeVector 77(int) 2
+              81:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 79 44
+         82(UBO):             TypeStruct 7(float) 7(float) 7(float) 7(float) 7(float) 7(float) 7(float) 7(float) 75(fvec4) 75(fvec4) 80(ivec2)
+              85:     10(int) Constant 48
+              86:     10(int) Constant 20
+              83:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 8 29 85 86 15 15 16
+              87:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 8 29 85 86 15 15 16
+              88:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 8 29 85 86 15 15 16
+              89:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 8 29 85 86 15 15 16
+              90:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 8 29 85 86 15 15 16
+              91:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 8 29 85 86 15 15 16
+              92:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 8 29 85 86 15 15 16
+              93:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 84 8 29 85 86 15 15 16
+              96:     10(int) Constant 50
+              97:     10(int) Constant 16
+              94:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 95 76 29 96 97 15 15 16
+              98:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 95 76 29 96 97 15 15 16
+             101:     10(int) Constant 51
+              99:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 100 81 29 101 86 15 15 16
+             104:     10(int) Constant 77
+             102:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 103 32 29 104 15 31 103 15 16 83 87 88 89 90 91 92 93 94 98 99
+        105(ubo):             TypeStruct 82(UBO)
+             108:     10(int) Constant 56
+             109:     10(int) Constant 12
+             106:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 107 102 29 108 109 15 15 16
+             110:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 111 32 29 104 15 31 111 15 16 106
+             112:             TypePointer Uniform 105(ubo)
+             113:    112(ptr) Variable Uniform
+             115:     10(int) Constant 8
+             114:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 30 110 29 104 15 31 30 113 115
+             116:     77(int) Constant 0
+             117:     77(int) Constant 2
+             118:             TypePointer Uniform 7(float)
+             130:             TypePointer Function 10(int)
+             134:     10(int) Constant 83
+             132:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 133 11 29 134 15 57 33
+             138:     77(int) Constant 10
+             139:             TypePointer Uniform 77(int)
+             154:             TypeBool
+             156:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+   161(Particle):             TypeStruct 75(fvec4) 75(fvec4) 75(fvec4) 75(fvec4) 7(float)
+             164:     10(int) Constant 30
+             165:     10(int) Constant 15
+             162:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 163 76 29 164 165 15 15 16
+             166:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 163 76 29 164 165 15 15 16
+             167:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 163 76 29 164 165 15 15 16
+             168:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 163 76 29 164 165 15 15 16
+             171:     10(int) Constant 31
+             172:     10(int) Constant 14
+             169:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 170 8 29 171 172 15 15 16
+             175:     10(int) Constant 88
+             173:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 174 32 29 175 15 31 174 15 16 162 166 167 168 169
+             176:             TypeRuntimeArray 161(Particle)
+             177:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 173 15
+ 178(particleIn):             TypeStruct 176
+             181:     10(int) Constant 35
+             182:     10(int) Constant 28
+             179:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 180 177 29 181 182 15 15 16
+             183:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 184 32 29 175 15 31 184 15 16 179
+             185:             TypePointer Uniform 178(particleIn)
+ 186(particleIn):    185(ptr) Variable Uniform
+             187:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 184 183 29 175 15 31 184 186(particleIn) 115
+             189:     77(int) Constant 4
+             192:    7(float) Constant 1065353216
+             193:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             197:             TypeRuntimeArray 161(Particle)
+             198:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 173 15
+199(particleOut):             TypeStruct 197
+             201:     10(int) Constant 37
+             200:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 180 198 29 201 164 15 15 16
+             204:     10(int) Constant 89
+             202:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 203 32 29 204 15 31 203 15 16 200
+             205:             TypePointer Uniform 199(particleOut)
+206(particleOut):    205(ptr) Variable Uniform
+             207:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 203 202 29 204 15 31 203 206(particleOut) 115
+             210:             TypePointer Uniform 75(fvec4)
+             215:     77(int) Constant 1
+             216:    7(float) Constant 0
+             217:   75(fvec4) ConstantComposite 216 216 216 216
+             223:     10(int) Constant 95
+             221:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 222 18 29 223 15 57 33
+             225:     77(int) Constant 9
+             235:     10(int) Constant 97
+             233:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 234 18 29 235 15 57 33
+             244:     10(int) Constant 98
+             242:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 243 18 29 244 15 57 33
+             252:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             276:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             300:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             309:     77(int) Constant 5
+             324:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             347:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             355:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             357:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             367:     77(int) Constant 6
+             382:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             386:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             388:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             416:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             424:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             426:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             454:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             458:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             460:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             482:     77(int) Constant 3
+             493:     10(int) Constant 137
+             491:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 492 18 29 493 15 57 33
+             507:    7(float) Constant 1056964608
+             537:     10(int) Constant 142
+             535:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 536 18 29 537 15 57 33
+             543:     77(int) Constant 8
+             550:     77(int) Constant 7
+             553:    7(float) Constant 1008981770
+             555:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+578(PushConstants):             TypeStruct 10(int)
+             581:     10(int) Constant 67
+             582:     10(int) Constant 23
+             579:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 580 11 29 581 582 15 15 16
+             585:     10(int) Constant 151
+             583:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 584 32 29 585 15 31 584 15 16 579
+    586($Global):             TypeStruct 578(PushConstants)
+             589:     10(int) Constant 71
+             587:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 588 583 29 589 165 15 15 16
+             590:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 591 32 29 585 15 31 591 15 16 587
+             592:             TypePointer Uniform 586($Global)
+             593:    592(ptr) Variable Uniform
+             594:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 30 590 29 585 15 31 30 593 115
+             595:             TypePointer Uniform 10(int)
+             598:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             604:     10(int) Constant 152
+             603:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 163 18 29 604 15 57 33
+             606:   17(fvec3) ConstantComposite 216 216 216
+             609:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             615:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             622:     10(int) Constant 156
+             620:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 621 18 29 622 15 57 33
+             634:     10(int) Constant 157
+             632:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 633 18 29 634 15 57 33
+             650:     10(int) Constant 158
+             648:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 649 18 29 650 15 57 33
+             677:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             724:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             730:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             777:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 155 13 44 15
+             827:             TypePointer Input 49(ivec3)
+         828(id):    827(ptr) Variable Input
+         5(main):           3 Function None 4
+               6:             Label
+         826(id):     51(ptr) Variable Function
+      830(param):     51(ptr) Variable Function
+             829:   49(ivec3) Load 828(id)
+                              Store 826(id) 829
+             831:   49(ivec3) Load 826(id)
+                              Store 830(param) 831
+             832:           3 FunctionCall 55(@main(vu3;) 830(param)
+                              Return
+                              FunctionEnd
+26(springForce(vf3;vf3;f1;):   17(fvec3) Function None 21
+          23(p0):     19(ptr) FunctionParameter
+          24(p1):     19(ptr) FunctionParameter
+    25(restDist):     20(ptr) FunctionParameter
+              35:             Label
+        65(dist):     19(ptr) Variable Function
+              36:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 28
+              37:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 29 15 15 15 15
+              40:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 38 23(p0) 41
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 42 24(p1) 41
+              48:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 46 25(restDist) 41
+              64:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 28 26(springForce(vf3;vf3;f1;)
+              69:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 66 65(dist) 41
+              70:   17(fvec3) Load 23(p0)
+              71:   17(fvec3) Load 24(p1)
+              72:   17(fvec3) FSub 70 71
+                              Store 65(dist) 72
+              73:   17(fvec3) Load 65(dist)
+              74:   17(fvec3) ExtInst 2(GLSL.std.450) 69(Normalize) 73
+             119:    118(ptr) AccessChain 113 116 117
+             120:    7(float) Load 119
+             121:   17(fvec3) VectorTimesScalar 74 120
+             122:   17(fvec3) Load 65(dist)
+             123:    7(float) ExtInst 2(GLSL.std.450) 66(Length) 122
+             124:    7(float) Load 25(restDist)
+             125:    7(float) FSub 123 124
+             126:   17(fvec3) VectorTimesScalar 121 125
+                              ReturnValue 126
+                              FunctionEnd
+  55(@main(vu3;):           3 Function None 52
+          54(id):     51(ptr) FunctionParameter
+              58:             Label
+      131(index):    130(ptr) Variable Function
+      220(force):     19(ptr) Variable Function
+        232(pos):     19(ptr) Variable Function
+        241(vel):     19(ptr) Variable Function
+      258(param):     19(ptr) Variable Function
+      262(param):     19(ptr) Variable Function
+      264(param):     20(ptr) Variable Function
+      282(param):     19(ptr) Variable Function
+      286(param):     19(ptr) Variable Function
+      288(param):     20(ptr) Variable Function
+      310(param):     19(ptr) Variable Function
+      314(param):     19(ptr) Variable Function
+      316(param):     20(ptr) Variable Function
+      333(param):     19(ptr) Variable Function
+      337(param):     19(ptr) Variable Function
+      339(param):     20(ptr) Variable Function
+      368(param):     19(ptr) Variable Function
+      372(param):     19(ptr) Variable Function
+      374(param):     20(ptr) Variable Function
+      398(param):     19(ptr) Variable Function
+      402(param):     19(ptr) Variable Function
+      404(param):     20(ptr) Variable Function
+      436(param):     19(ptr) Variable Function
+      440(param):     19(ptr) Variable Function
+      442(param):     20(ptr) Variable Function
+      470(param):     19(ptr) Variable Function
+      474(param):     19(ptr) Variable Function
+      476(param):     20(ptr) Variable Function
+          490(f):     19(ptr) Variable Function
+ 534(sphereDist):     19(ptr) Variable Function
+     602(normal):     19(ptr) Variable Function
+          619(a):     19(ptr) Variable Function
+          631(b):     19(ptr) Variable Function
+          647(c):     19(ptr) Variable Function
+              59:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 57
+              60:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 29 15 15 15 15
+              63:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 61 54(id) 41
+             129:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 57 55(@main(vu3;)
+             135:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 132 131(index) 41
+             136:    130(ptr) AccessChain 54(id) 32
+             137:     10(int) Load 136
+             140:    139(ptr) AccessChain 113 116 138 15
+             141:     77(int) Load 140
+             142:     10(int) Bitcast 141
+             143:     10(int) IMul 137 142
+             144:    130(ptr) AccessChain 54(id) 15
+             145:     10(int) Load 144
+             146:     10(int) IAdd 143 145
+                              Store 131(index) 146
+             147:     10(int) Load 131(index)
+             148:    139(ptr) AccessChain 113 116 138 15
+             149:     77(int) Load 148
+             150:    139(ptr) AccessChain 113 116 138 32
+             151:     77(int) Load 150
+             152:     77(int) IMul 149 151
+             153:     10(int) Bitcast 152
+             157:   154(bool) UGreaterThan 147 153
+                              SelectionMerge 159 None
+                              BranchConditional 157 158 159
+             158:               Label
+                                Return
+             159:             Label
+             188:     10(int) Load 131(index)
+             190:    118(ptr) AccessChain 186(particleIn) 116 188 189
+             191:    7(float) Load 190
+             194:   154(bool) FOrdEqual 191 192
+                              SelectionMerge 196 None
+                              BranchConditional 194 195 196
+             195:               Label
+             208:     10(int)   Load 131(index)
+             209:     10(int)   Load 131(index)
+             211:    210(ptr)   AccessChain 206(particleOut) 116 209 116
+             212:   75(fvec4)   Load 211
+             213:    210(ptr)   AccessChain 206(particleOut) 116 208 116
+                                Store 213 212
+             214:     10(int)   Load 131(index)
+             218:    210(ptr)   AccessChain 206(particleOut) 116 214 215
+                                Store 218 217
+                                Return
+             196:             Label
+             224:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 221 220(force) 41
+             226:    210(ptr) AccessChain 113 116 225
+             227:   75(fvec4) Load 226
+             228:   17(fvec3) VectorShuffle 227 227 0 1 2
+             229:    118(ptr) AccessChain 113 116 215
+             230:    7(float) Load 229
+             231:   17(fvec3) VectorTimesScalar 228 230
+                              Store 220(force) 231
+             236:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 233 232(pos) 41
+             237:     10(int) Load 131(index)
+             238:    210(ptr) AccessChain 186(particleIn) 116 237 116
+             239:   75(fvec4) Load 238
+             240:   17(fvec3) VectorShuffle 239 239 0 1 2
+                              Store 232(pos) 240
+             245:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 242 241(vel) 41
+             246:     10(int) Load 131(index)
+             247:    210(ptr) AccessChain 186(particleIn) 116 246 215
+             248:   75(fvec4) Load 247
+             249:   17(fvec3) VectorShuffle 248 248 0 1 2
+                              Store 241(vel) 249
+             250:    130(ptr) AccessChain 54(id) 15
+             251:     10(int) Load 250
+             253:   154(bool) UGreaterThan 251 15
+                              SelectionMerge 255 None
+                              BranchConditional 253 254 255
+             254:               Label
+             256:     10(int)   Load 131(index)
+             257:     10(int)   ISub 256 32
+             259:    210(ptr)   AccessChain 186(particleIn) 116 257 116
+             260:   75(fvec4)   Load 259
+             261:   17(fvec3)   VectorShuffle 260 260 0 1 2
+                                Store 258(param) 261
+             263:   17(fvec3)   Load 232(pos)
+                                Store 262(param) 263
+             265:    118(ptr)   AccessChain 113 116 189
+             266:    7(float)   Load 265
+                                Store 264(param) 266
+             267:   17(fvec3)   FunctionCall 26(springForce(vf3;vf3;f1;) 258(param) 262(param) 264(param)
+             268:   17(fvec3)   Load 220(force)
+             269:   17(fvec3)   FAdd 268 267
+                                Store 220(force) 269
+                                Branch 255
+             255:             Label
+             270:    130(ptr) AccessChain 54(id) 15
+             271:     10(int) Load 270
+             272:    139(ptr) AccessChain 113 116 138 15
+             273:     77(int) Load 272
+             274:     77(int) ISub 273 215
+             275:     10(int) Bitcast 274
+             277:   154(bool) ULessThan 271 275
+                              SelectionMerge 279 None
+                              BranchConditional 277 278 279
+             278:               Label
+             280:     10(int)   Load 131(index)
+             281:     10(int)   IAdd 280 32
+             283:    210(ptr)   AccessChain 186(particleIn) 116 281 116
+             284:   75(fvec4)   Load 283
+             285:   17(fvec3)   VectorShuffle 284 284 0 1 2
+                                Store 282(param) 285
+             287:   17(fvec3)   Load 232(pos)
+                                Store 286(param) 287
+             289:    118(ptr)   AccessChain 113 116 189
+             290:    7(float)   Load 289
+                                Store 288(param) 290
+             291:   17(fvec3)   FunctionCall 26(springForce(vf3;vf3;f1;) 282(param) 286(param) 288(param)
+             292:   17(fvec3)   Load 220(force)
+             293:   17(fvec3)   FAdd 292 291
+                                Store 220(force) 293
+                                Branch 279
+             279:             Label
+             294:    130(ptr) AccessChain 54(id) 32
+             295:     10(int) Load 294
+             296:    139(ptr) AccessChain 113 116 138 32
+             297:     77(int) Load 296
+             298:     77(int) ISub 297 215
+             299:     10(int) Bitcast 298
+             301:   154(bool) ULessThan 295 299
+                              SelectionMerge 303 None
+                              BranchConditional 301 302 303
+             302:               Label
+             304:     10(int)   Load 131(index)
+             305:    139(ptr)   AccessChain 113 116 138 15
+             306:     77(int)   Load 305
+             307:     10(int)   Bitcast 306
+             308:     10(int)   IAdd 304 307
+             311:    210(ptr)   AccessChain 186(particleIn) 116 308 116
+             312:   75(fvec4)   Load 311
+             313:   17(fvec3)   VectorShuffle 312 312 0 1 2
+                                Store 310(param) 313
+             315:   17(fvec3)   Load 232(pos)
+                                Store 314(param) 315
+             317:    118(ptr)   AccessChain 113 116 309
+             318:    7(float)   Load 317
+                                Store 316(param) 318
+             319:   17(fvec3)   FunctionCall 26(springForce(vf3;vf3;f1;) 310(param) 314(param) 316(param)
+             320:   17(fvec3)   Load 220(force)
+             321:   17(fvec3)   FAdd 320 319
+                                Store 220(force) 321
+                                Branch 303
+             303:             Label
+             322:    130(ptr) AccessChain 54(id) 32
+             323:     10(int) Load 322
+             325:   154(bool) UGreaterThan 323 15
+                              SelectionMerge 327 None
+                              BranchConditional 325 326 327
+             326:               Label
+             328:     10(int)   Load 131(index)
+             329:    139(ptr)   AccessChain 113 116 138 15
+             330:     77(int)   Load 329
+             331:     10(int)   Bitcast 330
+             332:     10(int)   ISub 328 331
+             334:    210(ptr)   AccessChain 186(particleIn) 116 332 116
+             335:   75(fvec4)   Load 334
+             336:   17(fvec3)   VectorShuffle 335 335 0 1 2
+                                Store 333(param) 336
+             338:   17(fvec3)   Load 232(pos)
+                                Store 337(param) 338
+             340:    118(ptr)   AccessChain 113 116 309
+             341:    7(float)   Load 340
+                                Store 339(param) 341
+             342:   17(fvec3)   FunctionCall 26(springForce(vf3;vf3;f1;) 333(param) 337(param) 339(param)
+             343:   17(fvec3)   Load 220(force)
+             344:   17(fvec3)   FAdd 343 342
+                                Store 220(force) 344
+                                Branch 327
+             327:             Label
+             345:    130(ptr) AccessChain 54(id) 15
+             346:     10(int) Load 345
+             348:   154(bool) UGreaterThan 346 15
+             349:    130(ptr) AccessChain 54(id) 32
+             350:     10(int) Load 349
+             351:    139(ptr) AccessChain 113 116 138 32
+             352:     77(int) Load 351
+             353:     77(int) ISub 352 215
+             354:     10(int) Bitcast 353
+             356:   154(bool) ULessThan 350 354
+             358:   154(bool) LogicalAnd 348 356
+                              SelectionMerge 360 None
+                              BranchConditional 358 359 360
+             359:               Label
+             361:     10(int)   Load 131(index)
+             362:    139(ptr)   AccessChain 113 116 138 15
+             363:     77(int)   Load 362
+             364:     10(int)   Bitcast 363
+             365:     10(int)   IAdd 361 364
+             366:     10(int)   ISub 365 32
+             369:    210(ptr)   AccessChain 186(particleIn) 116 366 116
+             370:   75(fvec4)   Load 369
+             371:   17(fvec3)   VectorShuffle 370 370 0 1 2
+                                Store 368(param) 371
+             373:   17(fvec3)   Load 232(pos)
+                                Store 372(param) 373
+             375:    118(ptr)   AccessChain 113 116 367
+             376:    7(float)   Load 375
+                                Store 374(param) 376
+             377:   17(fvec3)   FunctionCall 26(springForce(vf3;vf3;f1;) 368(param) 372(param) 374(param)
+             378:   17(fvec3)   Load 220(force)
+             379:   17(fvec3)   FAdd 378 377
+                                Store 220(force) 379
+                                Branch 360
+             360:             Label
+             380:    130(ptr) AccessChain 54(id) 15
+             381:     10(int) Load 380
+             383:   154(bool) UGreaterThan 381 15
+             384:    130(ptr) AccessChain 54(id) 32
+             385:     10(int) Load 384
+             387:   154(bool) UGreaterThan 385 15
+             389:   154(bool) LogicalAnd 383 387
+                              SelectionMerge 391 None
+                              BranchConditional 389 390 391
+             390:               Label
+             392:     10(int)   Load 131(index)
+             393:    139(ptr)   AccessChain 113 116 138 15
+             394:     77(int)   Load 393
+             395:     10(int)   Bitcast 394
+             396:     10(int)   ISub 392 395
+             397:     10(int)   ISub 396 32
+             399:    210(ptr)   AccessChain 186(particleIn) 116 397 116
+             400:   75(fvec4)   Load 399
+             401:   17(fvec3)   VectorShuffle 400 400 0 1 2
+                                Store 398(param) 401
+             403:   17(fvec3)   Load 232(pos)
+                                Store 402(param) 403
+             405:    118(ptr)   AccessChain 113 116 367
+             406:    7(float)   Load 405
+                                Store 404(param) 406
+             407:   17(fvec3)   FunctionCall 26(springForce(vf3;vf3;f1;) 398(param) 402(param) 404(param)
+             408:   17(fvec3)   Load 220(force)
+             409:   17(fvec3)   FAdd 408 407
+                                Store 220(force) 409
+                                Branch 391
+             391:             Label
+             410:    130(ptr) AccessChain 54(id) 15
+             411:     10(int) Load 410
+             412:    139(ptr) AccessChain 113 116 138 15
+             413:     77(int) Load 412
+             414:     77(int) ISub 413 215
+             415:     10(int) Bitcast 414
+             417:   154(bool) ULessThan 411 415
+             418:    130(ptr) AccessChain 54(id) 32
+             419:     10(int) Load 418
+             420:    139(ptr) AccessChain 113 116 138 32
+             421:     77(int) Load 420
+             422:     77(int) ISub 421 215
+             423:     10(int) Bitcast 422
+             425:   154(bool) ULessThan 419 423
+             427:   154(bool) LogicalAnd 417 425
+                              SelectionMerge 429 None
+                              BranchConditional 427 428 429
+             428:               Label
+             430:     10(int)   Load 131(index)
+             431:    139(ptr)   AccessChain 113 116 138 15
+             432:     77(int)   Load 431
+             433:     10(int)   Bitcast 432
+             434:     10(int)   IAdd 430 433
+             435:     10(int)   IAdd 434 32
+             437:    210(ptr)   AccessChain 186(particleIn) 116 435 116
+             438:   75(fvec4)   Load 437
+             439:   17(fvec3)   VectorShuffle 438 438 0 1 2
+                                Store 436(param) 439
+             441:   17(fvec3)   Load 232(pos)
+                                Store 440(param) 441
+             443:    118(ptr)   AccessChain 113 116 367
+             444:    7(float)   Load 443
+                                Store 442(param) 444
+             445:   17(fvec3)   FunctionCall 26(springForce(vf3;vf3;f1;) 436(param) 440(param) 442(param)
+             446:   17(fvec3)   Load 220(force)
+             447:   17(fvec3)   FAdd 446 445
+                                Store 220(force) 447
+                                Branch 429
+             429:             Label
+             448:    130(ptr) AccessChain 54(id) 15
+             449:     10(int) Load 448
+             450:    139(ptr) AccessChain 113 116 138 15
+             451:     77(int) Load 450
+             452:     77(int) ISub 451 215
+             453:     10(int) Bitcast 452
+             455:   154(bool) ULessThan 449 453
+             456:    130(ptr) AccessChain 54(id) 32
+             457:     10(int) Load 456
+             459:   154(bool) UGreaterThan 457 15
+             461:   154(bool) LogicalAnd 455 459
+                              SelectionMerge 463 None
+                              BranchConditional 461 462 463
+             462:               Label
+             464:     10(int)   Load 131(index)
+             465:    139(ptr)   AccessChain 113 116 138 15
+             466:     77(int)   Load 465
+             467:     10(int)   Bitcast 466
+             468:     10(int)   ISub 464 467
+             469:     10(int)   IAdd 468 32
+             471:    210(ptr)   AccessChain 186(particleIn) 116 469 116
+             472:   75(fvec4)   Load 471
+             473:   17(fvec3)   VectorShuffle 472 472 0 1 2
+                                Store 470(param) 473
+             475:   17(fvec3)   Load 232(pos)
+                                Store 474(param) 475
+             477:    118(ptr)   AccessChain 113 116 367
+             478:    7(float)   Load 477
+                                Store 476(param) 478
+             479:   17(fvec3)   FunctionCall 26(springForce(vf3;vf3;f1;) 470(param) 474(param) 476(param)
+             480:   17(fvec3)   Load 220(force)
+             481:   17(fvec3)   FAdd 480 479
+                                Store 220(force) 481
+                                Branch 463
+             463:             Label
+             483:    118(ptr) AccessChain 113 116 482
+             484:    7(float) Load 483
+             485:    7(float) FNegate 484
+             486:   17(fvec3) Load 241(vel)
+             487:   17(fvec3) VectorTimesScalar 486 485
+             488:   17(fvec3) Load 220(force)
+             489:   17(fvec3) FAdd 488 487
+                              Store 220(force) 489
+             494:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 491 490(f) 41
+             495:   17(fvec3) Load 220(force)
+             496:    118(ptr) AccessChain 113 116 215
+             497:    7(float) Load 496
+             498:    7(float) FDiv 192 497
+             499:   17(fvec3) VectorTimesScalar 495 498
+                              Store 490(f) 499
+             500:     10(int) Load 131(index)
+             501:   17(fvec3) Load 232(pos)
+             502:   17(fvec3) Load 241(vel)
+             503:    118(ptr) AccessChain 113 116 116
+             504:    7(float) Load 503
+             505:   17(fvec3) VectorTimesScalar 502 504
+             506:   17(fvec3) FAdd 501 505
+             508:   17(fvec3) Load 490(f)
+             509:   17(fvec3) VectorTimesScalar 508 507
+             510:    118(ptr) AccessChain 113 116 116
+             511:    7(float) Load 510
+             512:   17(fvec3) VectorTimesScalar 509 511
+             513:    118(ptr) AccessChain 113 116 116
+             514:    7(float) Load 513
+             515:   17(fvec3) VectorTimesScalar 512 514
+             516:   17(fvec3) FAdd 506 515
+             517:    7(float) CompositeExtract 516 0
+             518:    7(float) CompositeExtract 516 1
+             519:    7(float) CompositeExtract 516 2
+             520:   75(fvec4) CompositeConstruct 517 518 519 192
+             521:    210(ptr) AccessChain 206(particleOut) 116 500 116
+                              Store 521 520
+             522:     10(int) Load 131(index)
+             523:   17(fvec3) Load 241(vel)
+             524:   17(fvec3) Load 490(f)
+             525:    118(ptr) AccessChain 113 116 116
+             526:    7(float) Load 525
+             527:   17(fvec3) VectorTimesScalar 524 526
+             528:   17(fvec3) FAdd 523 527
+             529:    7(float) CompositeExtract 528 0
+             530:    7(float) CompositeExtract 528 1
+             531:    7(float) CompositeExtract 528 2
+             532:   75(fvec4) CompositeConstruct 529 530 531 216
+             533:    210(ptr) AccessChain 206(particleOut) 116 522 215
+                              Store 533 532
+             538:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 535 534(sphereDist) 41
+             539:     10(int) Load 131(index)
+             540:    210(ptr) AccessChain 206(particleOut) 116 539 116
+             541:   75(fvec4) Load 540
+             542:   17(fvec3) VectorShuffle 541 541 0 1 2
+             544:    210(ptr) AccessChain 113 116 543
+             545:   75(fvec4) Load 544
+             546:   17(fvec3) VectorShuffle 545 545 0 1 2
+             547:   17(fvec3) FSub 542 546
+                              Store 534(sphereDist) 547
+             548:   17(fvec3) Load 534(sphereDist)
+             549:    7(float) ExtInst 2(GLSL.std.450) 66(Length) 548
+             551:    118(ptr) AccessChain 113 116 550
+             552:    7(float) Load 551
+             554:    7(float) FAdd 552 553
+             556:   154(bool) FOrdLessThan 549 554
+                              SelectionMerge 558 None
+                              BranchConditional 556 557 558
+             557:               Label
+             559:     10(int)   Load 131(index)
+             560:    210(ptr)   AccessChain 113 116 543
+             561:   75(fvec4)   Load 560
+             562:   17(fvec3)   VectorShuffle 561 561 0 1 2
+             563:   17(fvec3)   Load 534(sphereDist)
+             564:   17(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 563
+             565:    118(ptr)   AccessChain 113 116 550
+             566:    7(float)   Load 565
+             567:    7(float)   FAdd 566 553
+             568:   17(fvec3)   VectorTimesScalar 564 567
+             569:   17(fvec3)   FAdd 562 568
+             570:    118(ptr)   AccessChain 206(particleOut) 116 559 116 15
+             571:    7(float)   CompositeExtract 569 0
+                                Store 570 571
+             572:    118(ptr)   AccessChain 206(particleOut) 116 559 116 32
+             573:    7(float)   CompositeExtract 569 1
+                                Store 572 573
+             574:    118(ptr)   AccessChain 206(particleOut) 116 559 116 44
+             575:    7(float)   CompositeExtract 569 2
+                                Store 574 575
+             576:     10(int)   Load 131(index)
+             577:    210(ptr)   AccessChain 206(particleOut) 116 576 215
+                                Store 577 217
+                                Branch 558
+             558:             Label
+             596:    595(ptr) AccessChain 593 116 116
+             597:     10(int) Load 596
+             599:   154(bool) IEqual 597 32
+                              SelectionMerge 601 None
+                              BranchConditional 599 600 601
+             600:               Label
+             605:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 603 602(normal) 41
+                                Store 602(normal) 606
+             607:    130(ptr)   AccessChain 54(id) 32
+             608:     10(int)   Load 607
+             610:   154(bool)   UGreaterThan 608 15
+                                SelectionMerge 612 None
+                                BranchConditional 610 611 612
+             611:                 Label
+             613:    130(ptr)     AccessChain 54(id) 15
+             614:     10(int)     Load 613
+             616:   154(bool)     UGreaterThan 614 15
+                                  SelectionMerge 618 None
+                                  BranchConditional 616 617 618
+             617:                   Label
+             623:           3       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 620 619(a) 41
+             624:     10(int)       Load 131(index)
+             625:     10(int)       ISub 624 32
+             626:    210(ptr)       AccessChain 186(particleIn) 116 625 116
+             627:   75(fvec4)       Load 626
+             628:   17(fvec3)       VectorShuffle 627 627 0 1 2
+             629:   17(fvec3)       Load 232(pos)
+             630:   17(fvec3)       FSub 628 629
+                                    Store 619(a) 630
+             635:           3       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 632 631(b) 41
+             636:     10(int)       Load 131(index)
+             637:    139(ptr)       AccessChain 113 116 138 15
+             638:     77(int)       Load 637
+             639:     10(int)       Bitcast 638
+             640:     10(int)       ISub 636 639
+             641:     10(int)       ISub 640 32
+             642:    210(ptr)       AccessChain 186(particleIn) 116 641 116
+             643:   75(fvec4)       Load 642
+             644:   17(fvec3)       VectorShuffle 643 643 0 1 2
+             645:   17(fvec3)       Load 232(pos)
+             646:   17(fvec3)       FSub 644 645
+                                    Store 631(b) 646
+             651:           3       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 648 647(c) 41
+             652:     10(int)       Load 131(index)
+             653:    139(ptr)       AccessChain 113 116 138 15
+             654:     77(int)       Load 653
+             655:     10(int)       Bitcast 654
+             656:     10(int)       ISub 652 655
+             657:    210(ptr)       AccessChain 186(particleIn) 116 656 116
+             658:   75(fvec4)       Load 657
+             659:   17(fvec3)       VectorShuffle 658 658 0 1 2
+             660:   17(fvec3)       Load 232(pos)
+             661:   17(fvec3)       FSub 659 660
+                                    Store 647(c) 661
+             662:   17(fvec3)       Load 619(a)
+             663:   17(fvec3)       Load 631(b)
+             664:   17(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 662 663
+             665:   17(fvec3)       Load 631(b)
+             666:   17(fvec3)       Load 647(c)
+             667:   17(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 665 666
+             668:   17(fvec3)       FAdd 664 667
+             669:   17(fvec3)       Load 602(normal)
+             670:   17(fvec3)       FAdd 669 668
+                                    Store 602(normal) 670
+                                    Branch 618
+             618:                 Label
+             671:    130(ptr)     AccessChain 54(id) 15
+             672:     10(int)     Load 671
+             673:    139(ptr)     AccessChain 113 116 138 15
+             674:     77(int)     Load 673
+             675:     77(int)     ISub 674 215
+             676:     10(int)     Bitcast 675
+             678:   154(bool)     ULessThan 672 676
+                                  SelectionMerge 680 None
+                                  BranchConditional 678 679 680
+             679:                   Label
+             681:     10(int)       Load 131(index)
+             682:    139(ptr)       AccessChain 113 116 138 15
+             683:     77(int)       Load 682
+             684:     10(int)       Bitcast 683
+             685:     10(int)       ISub 681 684
+             686:    210(ptr)       AccessChain 186(particleIn) 116 685 116
+             687:   75(fvec4)       Load 686
+             688:   17(fvec3)       VectorShuffle 687 687 0 1 2
+             689:   17(fvec3)       Load 232(pos)
+             690:   17(fvec3)       FSub 688 689
+                                    Store 619(a) 690
+             691:     10(int)       Load 131(index)
+             692:    139(ptr)       AccessChain 113 116 138 15
+             693:     77(int)       Load 692
+             694:     10(int)       Bitcast 693
+             695:     10(int)       ISub 691 694
+             696:     10(int)       IAdd 695 32
+             697:    210(ptr)       AccessChain 186(particleIn) 116 696 116
+             698:   75(fvec4)       Load 697
+             699:   17(fvec3)       VectorShuffle 698 698 0 1 2
+             700:   17(fvec3)       Load 232(pos)
+             701:   17(fvec3)       FSub 699 700
+                                    Store 631(b) 701
+             702:     10(int)       Load 131(index)
+             703:     10(int)       IAdd 702 32
+             704:    210(ptr)       AccessChain 186(particleIn) 116 703 116
+             705:   75(fvec4)       Load 704
+             706:   17(fvec3)       VectorShuffle 705 705 0 1 2
+             707:   17(fvec3)       Load 232(pos)
+             708:   17(fvec3)       FSub 706 707
+                                    Store 647(c) 708
+             709:   17(fvec3)       Load 619(a)
+             710:   17(fvec3)       Load 631(b)
+             711:   17(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 709 710
+             712:   17(fvec3)       Load 631(b)
+             713:   17(fvec3)       Load 647(c)
+             714:   17(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 712 713
+             715:   17(fvec3)       FAdd 711 714
+             716:   17(fvec3)       Load 602(normal)
+             717:   17(fvec3)       FAdd 716 715
+                                    Store 602(normal) 717
+                                    Branch 680
+             680:                 Label
+                                  Branch 612
+             612:               Label
+             718:    130(ptr)   AccessChain 54(id) 32
+             719:     10(int)   Load 718
+             720:    139(ptr)   AccessChain 113 116 138 32
+             721:     77(int)   Load 720
+             722:     77(int)   ISub 721 215
+             723:     10(int)   Bitcast 722
+             725:   154(bool)   ULessThan 719 723
+                                SelectionMerge 727 None
+                                BranchConditional 725 726 727
+             726:                 Label
+             728:    130(ptr)     AccessChain 54(id) 15
+             729:     10(int)     Load 728
+             731:   154(bool)     UGreaterThan 729 15
+                                  SelectionMerge 733 None
+                                  BranchConditional 731 732 733
+             732:                   Label
+             734:     10(int)       Load 131(index)
+             735:    139(ptr)       AccessChain 113 116 138 15
+             736:     77(int)       Load 735
+             737:     10(int)       Bitcast 736
+             738:     10(int)       IAdd 734 737
+             739:    210(ptr)       AccessChain 186(particleIn) 116 738 116
+             740:   75(fvec4)       Load 739
+             741:   17(fvec3)       VectorShuffle 740 740 0 1 2
+             742:   17(fvec3)       Load 232(pos)
+             743:   17(fvec3)       FSub 741 742
+                                    Store 619(a) 743
+             744:     10(int)       Load 131(index)
+             745:    139(ptr)       AccessChain 113 116 138 15
+             746:     77(int)       Load 745
+             747:     10(int)       Bitcast 746
+             748:     10(int)       IAdd 744 747
+             749:     10(int)       ISub 748 32
+             750:    210(ptr)       AccessChain 186(particleIn) 116 749 116
+             751:   75(fvec4)       Load 750
+             752:   17(fvec3)       VectorShuffle 751 751 0 1 2
+             753:   17(fvec3)       Load 232(pos)
+             754:   17(fvec3)       FSub 752 753
+                                    Store 631(b) 754
+             755:     10(int)       Load 131(index)
+             756:     10(int)       ISub 755 32
+             757:    210(ptr)       AccessChain 186(particleIn) 116 756 116
+             758:   75(fvec4)       Load 757
+             759:   17(fvec3)       VectorShuffle 758 758 0 1 2
+             760:   17(fvec3)       Load 232(pos)
+             761:   17(fvec3)       FSub 759 760
+                                    Store 647(c) 761
+             762:   17(fvec3)       Load 619(a)
+             763:   17(fvec3)       Load 631(b)
+             764:   17(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 762 763
+             765:   17(fvec3)       Load 631(b)
+             766:   17(fvec3)       Load 647(c)
+             767:   17(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 765 766
+             768:   17(fvec3)       FAdd 764 767
+             769:   17(fvec3)       Load 602(normal)
+             770:   17(fvec3)       FAdd 769 768
+                                    Store 602(normal) 770
+                                    Branch 733
+             733:                 Label
+             771:    130(ptr)     AccessChain 54(id) 15
+             772:     10(int)     Load 771
+             773:    139(ptr)     AccessChain 113 116 138 15
+             774:     77(int)     Load 773
+             775:     77(int)     ISub 774 215
+             776:     10(int)     Bitcast 775
+             778:   154(bool)     ULessThan 772 776
+                                  SelectionMerge 780 None
+                                  BranchConditional 778 779 780
+             779:                   Label
+             781:     10(int)       Load 131(index)
+             782:     10(int)       IAdd 781 32
+             783:    210(ptr)       AccessChain 186(particleIn) 116 782 116
+             784:   75(fvec4)       Load 783
+             785:   17(fvec3)       VectorShuffle 784 784 0 1 2
+             786:   17(fvec3)       Load 232(pos)
+             787:   17(fvec3)       FSub 785 786
+                                    Store 619(a) 787
+             788:     10(int)       Load 131(index)
+             789:    139(ptr)       AccessChain 113 116 138 15
+             790:     77(int)       Load 789
+             791:     10(int)       Bitcast 790
+             792:     10(int)       IAdd 788 791
+             793:     10(int)       IAdd 792 32
+             794:    210(ptr)       AccessChain 186(particleIn) 116 793 116
+             795:   75(fvec4)       Load 794
+             796:   17(fvec3)       VectorShuffle 795 795 0 1 2
+             797:   17(fvec3)       Load 232(pos)
+             798:   17(fvec3)       FSub 796 797
+                                    Store 631(b) 798
+             799:     10(int)       Load 131(index)
+             800:    139(ptr)       AccessChain 113 116 138 15
+             801:     77(int)       Load 800
+             802:     10(int)       Bitcast 801
+             803:     10(int)       IAdd 799 802
+             804:    210(ptr)       AccessChain 186(particleIn) 116 803 116
+             805:   75(fvec4)       Load 804
+             806:   17(fvec3)       VectorShuffle 805 805 0 1 2
+             807:   17(fvec3)       Load 232(pos)
+             808:   17(fvec3)       FSub 806 807
+                                    Store 647(c) 808
+             809:   17(fvec3)       Load 619(a)
+             810:   17(fvec3)       Load 631(b)
+             811:   17(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 809 810
+             812:   17(fvec3)       Load 631(b)
+             813:   17(fvec3)       Load 647(c)
+             814:   17(fvec3)       ExtInst 2(GLSL.std.450) 68(Cross) 812 813
+             815:   17(fvec3)       FAdd 811 814
+             816:   17(fvec3)       Load 602(normal)
+             817:   17(fvec3)       FAdd 816 815
+                                    Store 602(normal) 817
+                                    Branch 780
+             780:                 Label
+                                  Branch 727
+             727:               Label
+             818:     10(int)   Load 131(index)
+             819:   17(fvec3)   Load 602(normal)
+             820:   17(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 819
+             821:    7(float)   CompositeExtract 820 0
+             822:    7(float)   CompositeExtract 820 1
+             823:    7(float)   CompositeExtract 820 2
+             824:   75(fvec4)   CompositeConstruct 821 822 823 216
+             825:    210(ptr)   AccessChain 206(particleOut) 116 818 482
+                                Store 825 824
+                                Branch 601
+             601:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.frag.out b/Test/baseResults/spv.debuginfo.hlsl.frag.out
new file mode 100644
index 0000000..3c206a0
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.hlsl.frag.out
@@ -0,0 +1,987 @@
+spv.debuginfo.hlsl.frag
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 743
+
+                              Capability Shader
+                              Capability ImageQuery
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 5  "main" 736 739
+                              ExecutionMode 5 OriginUpperLeft
+               9:             String  "float"
+              12:             String  "uint"
+              32:             String  "textureProj"
+              35:             String  ""
+              43:             String  "P"
+              47:             String  "layer"
+              50:             String  "offset"
+              57:             String  "filterPCF"
+              63:             String  "sc"
+              75:             String  "shadow"
+              81:             String  "fragcolor"
+              84:             String  "fragPos"
+              90:             String  "@main"
+              96:             String  "inUV"
+             106:             String  "shadowCoord"
+             128:             String  "bool"
+             141:             String  "dist"
+             146:             String  "type.2d.image"
+             147:             String  "@type.2d.image"
+             152:             String  "textureShadowMap"
+             157:             String  "type.sampler"
+             158:             String  "@type.sampler"
+             162:             String  "samplerShadowMap"
+             166:             String  "type.sampled.image"
+             167:             String  "@type.sampled.image"
+             203:             String  "sizeQueryTemp"
+             209:             String  "int"
+             216:             String  "texDim"
+             230:             String  "elements"
+             237:             String  "levels"
+             244:             String  "scale"
+             250:             String  "dx"
+             261:             String  "dy"
+             272:             String  "shadowFactor"
+             277:             String  "count"
+             283:             String  "range"
+             289:             String  "x"
+             305:             String  "y"
+             351:             String  "i"
+             365:             String  "shadowClip"
+             378:             String  "color"
+             384:             String  "viewMatrix"
+             388:             String  "Light"
+             394:             String  "lights"
+             397:             String  "displayDebugTarget"
+             402:             String  "UBO"
+             405:             String  "ubo"
+             445:             String  "textureposition"
+             450:             String  "samplerposition"
+             460:             String  "normal"
+             465:             String  "textureNormal"
+             470:             String  "samplerNormal"
+             478:             String  "albedo"
+             483:             String  "textureAlbedo"
+             488:             String  "samplerAlbedo"
+             541:             String  "N"
+             560:             String  "L"
+             580:             String  "V"
+             592:             String  "lightCosInnerAngle"
+             598:             String  "lightCosOuterAngle"
+             604:             String  "lightRange"
+             610:             String  "dir"
+             625:             String  "cosDir"
+             633:             String  "spotEffect"
+             642:             String  "heightAttenuation"
+             650:             String  "NdotL"
+             659:             String  "diff"
+             666:             String  "R"
+             675:             String  "NdotR"
+             684:             String  "spec"
+                              Name 5  "main"
+                              Name 31  "textureProj(vf4;f1;vf2;"
+                              Name 28  "P"
+                              Name 29  "layer"
+                              Name 30  "offset"
+                              Name 56  "filterPCF(vf4;f1;"
+                              Name 54  "sc"
+                              Name 55  "layer"
+                              Name 74  "shadow(vf3;vf3;"
+                              Name 72  "fragcolor"
+                              Name 73  "fragPos"
+                              Name 89  "@main(vf2;"
+                              Name 88  "inUV"
+                              Name 99  "shadow"
+                              Name 104  "shadowCoord"
+                              Name 139  "dist"
+                              Name 150  "textureShadowMap"
+                              Name 160  "samplerShadowMap"
+                              Name 201  "sizeQueryTemp"
+                              Name 214  "texDim"
+                              Name 228  "elements"
+                              Name 235  "levels"
+                              Name 242  "scale"
+                              Name 248  "dx"
+                              Name 259  "dy"
+                              Name 270  "shadowFactor"
+                              Name 275  "count"
+                              Name 281  "range"
+                              Name 287  "x"
+                              Name 303  "y"
+                              Name 328  "param"
+                              Name 330  "param"
+                              Name 332  "param"
+                              Name 349  "i"
+                              Name 363  "shadowClip"
+                              Name 376  "Light"
+                              MemberName 376(Light) 0  "position"
+                              MemberName 376(Light) 1  "target"
+                              MemberName 376(Light) 2  "color"
+                              MemberName 376(Light) 3  "viewMatrix"
+                              Name 391  "UBO"
+                              MemberName 391(UBO) 0  "viewPos"
+                              MemberName 391(UBO) 1  "lights"
+                              MemberName 391(UBO) 2  "useShadows"
+                              MemberName 391(UBO) 3  "displayDebugTarget"
+                              Name 403  "ubo"
+                              MemberName 403(ubo) 0  "ubo"
+                              Name 410  ""
+                              Name 417  "shadowFactor"
+                              Name 423  "param"
+                              Name 425  "param"
+                              Name 436  "fragPos"
+                              Name 443  "textureposition"
+                              Name 448  "samplerposition"
+                              Name 458  "normal"
+                              Name 463  "textureNormal"
+                              Name 468  "samplerNormal"
+                              Name 476  "albedo"
+                              Name 481  "textureAlbedo"
+                              Name 486  "samplerAlbedo"
+                              Name 508  "fragcolor"
+                              Name 513  "param"
+                              Name 514  "param"
+                              Name 539  "N"
+                              Name 546  "i"
+                              Name 558  "L"
+                              Name 570  "dist"
+                              Name 578  "V"
+                              Name 590  "lightCosInnerAngle"
+                              Name 596  "lightCosOuterAngle"
+                              Name 602  "lightRange"
+                              Name 608  "dir"
+                              Name 623  "cosDir"
+                              Name 631  "spotEffect"
+                              Name 640  "heightAttenuation"
+                              Name 648  "NdotL"
+                              Name 657  "diff"
+                              Name 664  "R"
+                              Name 673  "NdotR"
+                              Name 682  "spec"
+                              Name 722  "param"
+                              Name 724  "param"
+                              Name 734  "inUV"
+                              Name 736  "inUV"
+                              Name 739  "@entryPointOutput"
+                              Name 740  "param"
+                              Decorate 150(textureShadowMap) DescriptorSet 0
+                              Decorate 150(textureShadowMap) Binding 5
+                              Decorate 160(samplerShadowMap) DescriptorSet 0
+                              Decorate 160(samplerShadowMap) Binding 5
+                              MemberDecorate 376(Light) 0 Offset 0
+                              MemberDecorate 376(Light) 1 Offset 16
+                              MemberDecorate 376(Light) 2 Offset 32
+                              MemberDecorate 376(Light) 3 RowMajor
+                              MemberDecorate 376(Light) 3 Offset 48
+                              MemberDecorate 376(Light) 3 MatrixStride 16
+                              Decorate 389 ArrayStride 112
+                              MemberDecorate 391(UBO) 0 Offset 0
+                              MemberDecorate 391(UBO) 1 Offset 16
+                              MemberDecorate 391(UBO) 2 Offset 352
+                              MemberDecorate 391(UBO) 3 Offset 356
+                              MemberDecorate 403(ubo) 0 Offset 0
+                              Decorate 403(ubo) Block
+                              Decorate 410 DescriptorSet 0
+                              Decorate 410 Binding 4
+                              Decorate 443(textureposition) DescriptorSet 0
+                              Decorate 443(textureposition) Binding 1
+                              Decorate 448(samplerposition) DescriptorSet 0
+                              Decorate 448(samplerposition) Binding 1
+                              Decorate 463(textureNormal) DescriptorSet 0
+                              Decorate 463(textureNormal) Binding 2
+                              Decorate 468(samplerNormal) DescriptorSet 0
+                              Decorate 468(samplerNormal) Binding 2
+                              Decorate 481(textureAlbedo) DescriptorSet 0
+                              Decorate 481(textureAlbedo) Binding 3
+                              Decorate 486(samplerAlbedo) DescriptorSet 0
+                              Decorate 486(samplerAlbedo) Binding 3
+                              Decorate 736(inUV) Location 0
+                              Decorate 739(@entryPointOutput) Location 0
+               3:             TypeVoid
+               4:             TypeFunction 3
+               7:             TypeFloat 32
+              10:             TypeInt 32 0
+              13:     10(int) Constant 32
+              14:     10(int) Constant 6
+              15:     10(int) Constant 0
+              11:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 12 13 14 15
+              16:     10(int) Constant 3
+               8:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 9 13 16 15
+              17:             TypeVector 7(float) 4
+              18:     10(int) Constant 4
+              19:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 18
+              20:             TypePointer Function 17(fvec4)
+              21:             TypePointer Function 7(float)
+              22:             TypeVector 7(float) 2
+              23:     10(int) Constant 2
+              24:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 23
+              25:             TypePointer Function 22(fvec2)
+              26:             TypeFunction 7(float) 20(ptr) 21(ptr) 25(ptr)
+              27:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 8 19 8 24
+              34:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 35
+              37:     10(int) Constant 1
+              38:     10(int) Constant 5
+              36:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 37 18 34 38
+              33:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 32 27 34 15 15 36 32 16 15
+              42:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 43 19 34 15 15 33 18 37
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              46:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 47 8 34 15 15 33 18 23
+              49:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 50 24 34 15 15 33 18 16
+              52:             TypeFunction 7(float) 20(ptr) 21(ptr)
+              53:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 8 19 8
+              58:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 57 53 34 15 15 36 57 16 15
+              62:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 63 19 34 15 15 58 18 37
+              65:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 47 8 34 15 15 58 18 23
+              67:             TypeVector 7(float) 3
+              68:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 16
+              69:             TypePointer Function 67(fvec3)
+              70:             TypeFunction 67(fvec3) 69(ptr) 69(ptr)
+              71:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 68 68 68
+              76:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 75 71 34 15 15 36 75 16 15
+              80:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 81 68 34 15 15 76 18 37
+              83:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 84 68 34 15 15 76 18 23
+              86:             TypeFunction 17(fvec4) 25(ptr)
+              87:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 19 24
+              91:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 90 87 34 15 15 36 90 16 15
+              95:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 96 24 34 15 15 91 18 37
+             101:     10(int) Constant 62
+             100:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 75 8 34 101 15 33 18
+             103:    7(float) Constant 1065353216
+             107:     10(int) Constant 63
+             105:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 106 19 34 107 15 33 18
+             116:    7(float) Constant 1056964608
+             126:    7(float) Constant 3212836864
+             127:             TypeBool
+             129:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             133:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             135:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             142:     10(int) Constant 68
+             140:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 141 8 34 142 15 33 18
+             144:             TypeImage 7(float) 2D array sampled format:Unknown
+             148:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(Unknown)
+             145:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 146 15 34 142 15 36 147 148 16
+             149:             TypePointer UniformConstant 144
+150(textureShadowMap):    149(ptr) Variable UniformConstant
+             153:     10(int) Constant 8
+             151:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 152 145 34 142 15 36 152 150(textureShadowMap) 153
+             155:             TypeSampler
+             156:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 157 37 34 142 15 36 158 148 16
+             159:             TypePointer UniformConstant 155
+160(samplerShadowMap):    159(ptr) Variable UniformConstant
+             161:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 162 156 34 142 15 36 162 160(samplerShadowMap) 153
+             164:             TypeSampledImage 144
+             165:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 166 15 34 142 15 36 167 148 16
+             181:    7(float) Constant 0
+             182:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             187:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             189:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             193:    7(float) Constant 1048576000
+             198:             TypeVector 10(int) 3
+             199:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 11 16
+             200:             TypePointer Function 198(ivec3)
+             204:     10(int) Constant 80
+             202:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 203 199 34 204 15 58 18
+             208:             TypeInt 32 1
+             210:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 209 13 18 15
+             211:             TypeVector 208(int) 2
+             212:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 210 23
+             213:             TypePointer Function 211(ivec2)
+             215:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 216 212 34 204 15 58 18
+             218:             TypePointer Function 10(int)
+             222:             TypePointer Function 208(int)
+             229:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 230 210 34 204 15 58 18
+             236:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 237 210 34 204 15 58 18
+             245:     10(int) Constant 81
+             243:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 244 8 34 245 15 58 18
+             247:    7(float) Constant 1069547520
+             251:     10(int) Constant 82
+             249:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 250 8 34 251 15 58 18
+             262:     10(int) Constant 83
+             260:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 261 8 34 262 15 58 18
+             273:     10(int) Constant 85
+             271:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 272 8 34 273 15 58 18
+             278:     10(int) Constant 86
+             276:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 277 210 34 278 15 58 18
+             280:    208(int) Constant 0
+             284:     10(int) Constant 87
+             282:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 283 210 34 284 15 58 18
+             286:    208(int) Constant 1
+             290:     10(int) Constant 89
+             288:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 289 210 34 290 15 58 18
+             301:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             306:     10(int) Constant 91
+             304:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 305 210 34 306 15 58 18
+             317:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             352:     10(int) Constant 102
+             350:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 351 210 34 352 15 76 18
+             360:    208(int) Constant 3
+             361:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             366:     10(int) Constant 104
+             364:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 365 19 34 366 15 76 18
+             373:             TypeMatrix 17(fvec4) 4
+             375:   127(bool) ConstantTrue
+             374:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 19 18 375
+      376(Light):             TypeStruct 17(fvec4) 17(fvec4) 17(fvec4) 373
+             379:     10(int) Constant 46
+             380:     10(int) Constant 14
+             377:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 378 19 34 379 380 15 15 16
+             381:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 378 19 34 379 380 15 15 16
+             382:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 378 19 34 379 380 15 15 16
+             385:     10(int) Constant 47
+             386:     10(int) Constant 21
+             383:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 384 374 34 385 386 15 15 16
+             387:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 388 37 34 366 15 36 388 15 16 377 381 382 383
+             389:             TypeArray 376(Light) 16
+             390:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 387 16
+        391(UBO):             TypeStruct 17(fvec4) 389 208(int) 208(int)
+             392:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 378 19 34 379 380 15 15 16
+             395:     10(int) Constant 53
+             393:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 394 390 34 395 380 15 15 16
+             398:     10(int) Constant 55
+             399:     10(int) Constant 24
+             396:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 397 210 34 398 399 15 15 16
+             400:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 397 210 34 398 399 15 15 16
+             401:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 402 37 34 366 15 36 402 15 16 392 393 396 400
+        403(ubo):             TypeStruct 391(UBO)
+             406:     10(int) Constant 58
+             407:     10(int) Constant 37
+             404:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 405 401 34 406 407 15 15 16
+             408:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 405 37 34 366 15 36 405 15 16 404
+             409:             TypePointer Uniform 403(ubo)
+             410:    409(ptr) Variable Uniform
+             411:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 35 408 34 366 15 36 35 410 153
+             413:             TypePointer Uniform 373
+             419:     10(int) Constant 108
+             418:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 272 8 34 419 15 76 18
+             438:     10(int) Constant 121
+             437:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 84 68 34 438 15 91 18
+             440:             TypeImage 7(float) 2D sampled format:Unknown
+             441:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 146 15 34 438 15 36 147 148 16
+             442:             TypePointer UniformConstant 440
+443(textureposition):    442(ptr) Variable UniformConstant
+             444:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 445 441 34 438 15 36 445 443(textureposition) 153
+             447:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 157 37 34 438 15 36 158 148 16
+448(samplerposition):    159(ptr) Variable UniformConstant
+             449:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 450 447 34 438 15 36 450 448(samplerposition) 153
+             452:             TypeSampledImage 440
+             453:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 166 15 34 438 15 36 167 148 16
+             461:     10(int) Constant 122
+             459:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 460 68 34 461 15 91 18
+463(textureNormal):    442(ptr) Variable UniformConstant
+             464:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 465 441 34 461 15 36 465 463(textureNormal) 153
+             467:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 157 37 34 461 15 36 158 148 16
+468(samplerNormal):    159(ptr) Variable UniformConstant
+             469:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 470 467 34 461 15 36 470 468(samplerNormal) 153
+             479:     10(int) Constant 123
+             477:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 478 19 34 479 15 91 18
+481(textureAlbedo):    442(ptr) Variable UniformConstant
+             482:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 483 441 34 479 15 36 483 481(textureAlbedo) 153
+             485:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 157 37 34 479 15 36 158 148 16
+486(samplerAlbedo):    159(ptr) Variable UniformConstant
+             487:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 488 485 34 479 15 36 488 486(samplerAlbedo) 153
+             493:             TypePointer Uniform 208(int)
+             496:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             510:     10(int) Constant 131
+             509:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 81 68 34 510 15 91 18
+             512:   67(fvec3) ConstantComposite 103 103 103
+             537:    7(float) Constant 1036831949
+             542:     10(int) Constant 152
+             540:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 541 68 34 542 15 91 18
+             548:     10(int) Constant 154
+             547:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 351 210 34 548 15 91 18
+             556:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             561:     10(int) Constant 157
+             559:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 560 68 34 561 15 91 18
+             564:             TypePointer Uniform 17(fvec4)
+             572:     10(int) Constant 159
+             571:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 141 8 34 572 15 91 18
+             581:     10(int) Constant 163
+             579:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 580 68 34 581 15 91 18
+             593:     10(int) Constant 166
+             591:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 592 8 34 593 15 91 18
+             595:    7(float) Constant 1064781546
+             599:     10(int) Constant 167
+             597:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 598 8 34 599 15 91 18
+             601:    7(float) Constant 1063781322
+             605:     10(int) Constant 168
+             603:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 604 8 34 605 15 91 18
+             607:    7(float) Constant 1120403456
+             611:     10(int) Constant 171
+             609:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 610 68 34 611 15 91 18
+             626:     10(int) Constant 174
+             624:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 625 8 34 626 15 91 18
+             634:     10(int) Constant 175
+             632:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 633 8 34 634 15 91 18
+             643:     10(int) Constant 176
+             641:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 642 8 34 643 15 91 18
+             651:     10(int) Constant 179
+             649:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 650 8 34 651 15 91 18
+             660:     10(int) Constant 180
+             658:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 659 68 34 660 15 91 18
+             667:     10(int) Constant 183
+             665:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 666 68 34 667 15 91 18
+             676:     10(int) Constant 184
+             674:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 675 8 34 676 15 91 18
+             685:     10(int) Constant 185
+             683:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 684 68 34 685 15 91 18
+             688:    7(float) Constant 1098907648
+             693:    7(float) Constant 1075838976
+             704:    208(int) Constant 2
+             718:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 128 13 23 15
+             735:             TypePointer Input 22(fvec2)
+       736(inUV):    735(ptr) Variable Input
+             738:             TypePointer Output 17(fvec4)
+739(@entryPointOutput):    738(ptr) Variable Output
+         5(main):           3 Function None 4
+               6:             Label
+       734(inUV):     25(ptr) Variable Function
+      740(param):     25(ptr) Variable Function
+             737:   22(fvec2) Load 736(inUV)
+                              Store 734(inUV) 737
+             741:   22(fvec2) Load 734(inUV)
+                              Store 740(param) 741
+             742:   17(fvec4) FunctionCall 89(@main(vf2;) 740(param)
+                              Store 739(@entryPointOutput) 742
+                              Return
+                              FunctionEnd
+31(textureProj(vf4;f1;vf2;):    7(float) Function None 26
+           28(P):     20(ptr) FunctionParameter
+       29(layer):     21(ptr) FunctionParameter
+      30(offset):     25(ptr) FunctionParameter
+              39:             Label
+      99(shadow):     21(ptr) Variable Function
+104(shadowCoord):     20(ptr) Variable Function
+       139(dist):     21(ptr) Variable Function
+              40:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 33
+              41:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 34 15 15 15 15
+              44:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 42 28(P) 45
+              48:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 46 29(layer) 45
+              51:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 49 30(offset) 45
+              98:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 33 31(textureProj(vf4;f1;vf2;)
+             102:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 100 99(shadow) 45
+                              Store 99(shadow) 103
+             108:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 105 104(shadowCoord) 45
+             109:   17(fvec4) Load 28(P)
+             110:     21(ptr) AccessChain 28(P) 16
+             111:    7(float) Load 110
+             112:   17(fvec4) CompositeConstruct 111 111 111 111
+             113:   17(fvec4) FDiv 109 112
+                              Store 104(shadowCoord) 113
+             114:   17(fvec4) Load 104(shadowCoord)
+             115:   22(fvec2) VectorShuffle 114 114 0 1
+             117:   22(fvec2) VectorTimesScalar 115 116
+             118:   22(fvec2) CompositeConstruct 116 116
+             119:   22(fvec2) FAdd 117 118
+             120:     21(ptr) AccessChain 104(shadowCoord) 15
+             121:    7(float) CompositeExtract 119 0
+                              Store 120 121
+             122:     21(ptr) AccessChain 104(shadowCoord) 37
+             123:    7(float) CompositeExtract 119 1
+                              Store 122 123
+             124:     21(ptr) AccessChain 104(shadowCoord) 23
+             125:    7(float) Load 124
+             130:   127(bool) FOrdGreaterThan 125 126
+             131:     21(ptr) AccessChain 104(shadowCoord) 23
+             132:    7(float) Load 131
+             134:   127(bool) FOrdLessThan 132 103
+             136:   127(bool) LogicalAnd 130 134
+                              SelectionMerge 138 None
+                              BranchConditional 136 137 138
+             137:               Label
+             143:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 140 139(dist) 45
+             154:         144   Load 150(textureShadowMap)
+             163:         155   Load 160(samplerShadowMap)
+             168:         164   SampledImage 154 163
+             169:   17(fvec4)   Load 104(shadowCoord)
+             170:   22(fvec2)   VectorShuffle 169 169 0 1
+             171:   22(fvec2)   Load 30(offset)
+             172:   22(fvec2)   FAdd 170 171
+             173:    7(float)   Load 29(layer)
+             174:    7(float)   CompositeExtract 172 0
+             175:    7(float)   CompositeExtract 172 1
+             176:   67(fvec3)   CompositeConstruct 174 175 173
+             177:   17(fvec4)   ImageSampleImplicitLod 168 176
+             178:    7(float)   CompositeExtract 177 0
+                                Store 139(dist) 178
+             179:     21(ptr)   AccessChain 104(shadowCoord) 16
+             180:    7(float)   Load 179
+             183:   127(bool)   FOrdGreaterThan 180 181
+             184:    7(float)   Load 139(dist)
+             185:     21(ptr)   AccessChain 104(shadowCoord) 23
+             186:    7(float)   Load 185
+             188:   127(bool)   FOrdLessThan 184 186
+             190:   127(bool)   LogicalAnd 183 188
+                                SelectionMerge 192 None
+                                BranchConditional 190 191 192
+             191:                 Label
+                                  Store 99(shadow) 193
+                                  Branch 192
+             192:               Label
+                                Branch 138
+             138:             Label
+             194:    7(float) Load 99(shadow)
+                              ReturnValue 194
+                              FunctionEnd
+56(filterPCF(vf4;f1;):    7(float) Function None 52
+          54(sc):     20(ptr) FunctionParameter
+       55(layer):     21(ptr) FunctionParameter
+              59:             Label
+201(sizeQueryTemp):    200(ptr) Variable Function
+     214(texDim):    213(ptr) Variable Function
+   228(elements):    222(ptr) Variable Function
+     235(levels):    222(ptr) Variable Function
+      242(scale):     21(ptr) Variable Function
+         248(dx):     21(ptr) Variable Function
+         259(dy):     21(ptr) Variable Function
+270(shadowFactor):     21(ptr) Variable Function
+      275(count):    222(ptr) Variable Function
+      281(range):    222(ptr) Variable Function
+          287(x):    222(ptr) Variable Function
+          303(y):    222(ptr) Variable Function
+      328(param):     20(ptr) Variable Function
+      330(param):     21(ptr) Variable Function
+      332(param):     25(ptr) Variable Function
+              60:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 58
+              61:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 34 15 15 15 15
+              64:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 62 54(sc) 45
+              66:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 65 55(layer) 45
+             197:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 58 56(filterPCF(vf4;f1;)
+             205:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 202 201(sizeQueryTemp) 45
+             206:         144 Load 150(textureShadowMap)
+             207:  198(ivec3) ImageQuerySizeLod 206 15
+                              Store 201(sizeQueryTemp) 207
+             217:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 215 214(texDim) 45
+             219:    218(ptr) AccessChain 201(sizeQueryTemp) 15
+             220:     10(int) Load 219
+             221:    208(int) Bitcast 220
+             223:    222(ptr) AccessChain 214(texDim) 15
+                              Store 223 221
+             224:    218(ptr) AccessChain 201(sizeQueryTemp) 37
+             225:     10(int) Load 224
+             226:    208(int) Bitcast 225
+             227:    222(ptr) AccessChain 214(texDim) 37
+                              Store 227 226
+             231:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 229 228(elements) 45
+             232:    218(ptr) AccessChain 201(sizeQueryTemp) 23
+             233:     10(int) Load 232
+             234:    208(int) Bitcast 233
+                              Store 228(elements) 234
+             238:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 236 235(levels) 45
+             239:         144 Load 150(textureShadowMap)
+             240:     10(int) ImageQueryLevels 239
+             241:    208(int) Bitcast 240
+                              Store 235(levels) 241
+             246:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 243 242(scale) 45
+                              Store 242(scale) 247
+             252:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 249 248(dx) 45
+             253:    7(float) Load 242(scale)
+             254:    7(float) FMul 253 103
+             255:    222(ptr) AccessChain 214(texDim) 15
+             256:    208(int) Load 255
+             257:    7(float) ConvertSToF 256
+             258:    7(float) FDiv 254 257
+                              Store 248(dx) 258
+             263:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 260 259(dy) 45
+             264:    7(float) Load 242(scale)
+             265:    7(float) FMul 264 103
+             266:    222(ptr) AccessChain 214(texDim) 37
+             267:    208(int) Load 266
+             268:    7(float) ConvertSToF 267
+             269:    7(float) FDiv 265 268
+                              Store 259(dy) 269
+             274:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 271 270(shadowFactor) 45
+                              Store 270(shadowFactor) 181
+             279:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 276 275(count) 45
+                              Store 275(count) 280
+             285:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 282 281(range) 45
+                              Store 281(range) 286
+             291:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 288 287(x) 45
+             292:    208(int) Load 281(range)
+             293:    208(int) SNegate 292
+                              Store 287(x) 293
+                              Branch 294
+             294:             Label
+                              LoopMerge 296 297 None
+                              Branch 298
+             298:             Label
+             299:    208(int) Load 287(x)
+             300:    208(int) Load 281(range)
+             302:   127(bool) SLessThanEqual 299 300
+                              BranchConditional 302 295 296
+             295:               Label
+             307:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 304 303(y) 45
+             308:    208(int)   Load 281(range)
+             309:    208(int)   SNegate 308
+                                Store 303(y) 309
+                                Branch 310
+             310:               Label
+                                LoopMerge 312 313 None
+                                Branch 314
+             314:               Label
+             315:    208(int)   Load 303(y)
+             316:    208(int)   Load 281(range)
+             318:   127(bool)   SLessThanEqual 315 316
+                                BranchConditional 318 311 312
+             311:                 Label
+             319:    7(float)     Load 248(dx)
+             320:    208(int)     Load 287(x)
+             321:    7(float)     ConvertSToF 320
+             322:    7(float)     FMul 319 321
+             323:    7(float)     Load 259(dy)
+             324:    208(int)     Load 303(y)
+             325:    7(float)     ConvertSToF 324
+             326:    7(float)     FMul 323 325
+             327:   22(fvec2)     CompositeConstruct 322 326
+             329:   17(fvec4)     Load 54(sc)
+                                  Store 328(param) 329
+             331:    7(float)     Load 55(layer)
+                                  Store 330(param) 331
+                                  Store 332(param) 327
+             333:    7(float)     FunctionCall 31(textureProj(vf4;f1;vf2;) 328(param) 330(param) 332(param)
+             334:    7(float)     Load 270(shadowFactor)
+             335:    7(float)     FAdd 334 333
+                                  Store 270(shadowFactor) 335
+             336:    208(int)     Load 275(count)
+             337:    208(int)     IAdd 336 286
+                                  Store 275(count) 337
+                                  Branch 313
+             313:                 Label
+             338:    208(int)     Load 303(y)
+             339:    208(int)     IAdd 338 286
+                                  Store 303(y) 339
+                                  Branch 310
+             312:               Label
+                                Branch 297
+             297:               Label
+             340:    208(int)   Load 287(x)
+             341:    208(int)   IAdd 340 286
+                                Store 287(x) 341
+                                Branch 294
+             296:             Label
+             342:    7(float) Load 270(shadowFactor)
+             343:    208(int) Load 275(count)
+             344:    7(float) ConvertSToF 343
+             345:    7(float) FDiv 342 344
+                              ReturnValue 345
+                              FunctionEnd
+74(shadow(vf3;vf3;):   67(fvec3) Function None 70
+   72(fragcolor):     69(ptr) FunctionParameter
+     73(fragPos):     69(ptr) FunctionParameter
+              77:             Label
+          349(i):    222(ptr) Variable Function
+ 363(shadowClip):     20(ptr) Variable Function
+417(shadowFactor):     21(ptr) Variable Function
+      423(param):     20(ptr) Variable Function
+      425(param):     21(ptr) Variable Function
+              78:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 76
+              79:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 34 15 15 15 15
+              82:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 80 72(fragcolor) 45
+              85:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 83 73(fragPos) 45
+             348:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 76 74(shadow(vf3;vf3;)
+             353:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 350 349(i) 45
+                              Store 349(i) 280
+                              Branch 354
+             354:             Label
+                              LoopMerge 356 357 None
+                              Branch 358
+             358:             Label
+             359:    208(int) Load 349(i)
+             362:   127(bool) SLessThan 359 360
+                              BranchConditional 362 355 356
+             355:               Label
+             367:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 364 363(shadowClip) 45
+             368:   67(fvec3)   Load 73(fragPos)
+             369:    7(float)   CompositeExtract 368 0
+             370:    7(float)   CompositeExtract 368 1
+             371:    7(float)   CompositeExtract 368 2
+             372:   17(fvec4)   CompositeConstruct 369 370 371 103
+             412:    208(int)   Load 349(i)
+             414:    413(ptr)   AccessChain 410 280 286 412 360
+             415:         373   Load 414
+             416:   17(fvec4)   VectorTimesMatrix 372 415
+                                Store 363(shadowClip) 416
+             420:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 418 417(shadowFactor) 45
+             421:    208(int)   Load 349(i)
+             422:    7(float)   ConvertSToF 421
+             424:   17(fvec4)   Load 363(shadowClip)
+                                Store 423(param) 424
+                                Store 425(param) 422
+             426:    7(float)   FunctionCall 56(filterPCF(vf4;f1;) 423(param) 425(param)
+                                Store 417(shadowFactor) 426
+             427:    7(float)   Load 417(shadowFactor)
+             428:   67(fvec3)   Load 72(fragcolor)
+             429:   67(fvec3)   VectorTimesScalar 428 427
+                                Store 72(fragcolor) 429
+                                Branch 357
+             357:               Label
+             430:    208(int)   Load 349(i)
+             431:    208(int)   IAdd 430 286
+                                Store 349(i) 431
+                                Branch 354
+             356:             Label
+             432:   67(fvec3) Load 72(fragcolor)
+                              ReturnValue 432
+                              FunctionEnd
+  89(@main(vf2;):   17(fvec4) Function None 86
+        88(inUV):     25(ptr) FunctionParameter
+              92:             Label
+    436(fragPos):     69(ptr) Variable Function
+     458(normal):     69(ptr) Variable Function
+     476(albedo):     20(ptr) Variable Function
+  508(fragcolor):     69(ptr) Variable Function
+      513(param):     69(ptr) Variable Function
+      514(param):     69(ptr) Variable Function
+          539(N):     69(ptr) Variable Function
+          546(i):    222(ptr) Variable Function
+          558(L):     69(ptr) Variable Function
+       570(dist):     21(ptr) Variable Function
+          578(V):     69(ptr) Variable Function
+590(lightCosInnerAngle):     21(ptr) Variable Function
+596(lightCosOuterAngle):     21(ptr) Variable Function
+ 602(lightRange):     21(ptr) Variable Function
+        608(dir):     69(ptr) Variable Function
+     623(cosDir):     21(ptr) Variable Function
+ 631(spotEffect):     21(ptr) Variable Function
+640(heightAttenuation):     21(ptr) Variable Function
+      648(NdotL):     21(ptr) Variable Function
+       657(diff):     69(ptr) Variable Function
+          664(R):     69(ptr) Variable Function
+      673(NdotR):     21(ptr) Variable Function
+       682(spec):     69(ptr) Variable Function
+      722(param):     69(ptr) Variable Function
+      724(param):     69(ptr) Variable Function
+              93:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 91
+              94:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 34 15 15 15 15
+              97:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 95 88(inUV) 45
+             435:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 91 89(@main(vf2;)
+             439:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 437 436(fragPos) 45
+             446:         440 Load 443(textureposition)
+             451:         155 Load 448(samplerposition)
+             454:         452 SampledImage 446 451
+             455:   22(fvec2) Load 88(inUV)
+             456:   17(fvec4) ImageSampleImplicitLod 454 455
+             457:   67(fvec3) VectorShuffle 456 456 0 1 2
+                              Store 436(fragPos) 457
+             462:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 459 458(normal) 45
+             466:         440 Load 463(textureNormal)
+             471:         155 Load 468(samplerNormal)
+             472:         452 SampledImage 466 471
+             473:   22(fvec2) Load 88(inUV)
+             474:   17(fvec4) ImageSampleImplicitLod 472 473
+             475:   67(fvec3) VectorShuffle 474 474 0 1 2
+                              Store 458(normal) 475
+             480:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 477 476(albedo) 45
+             484:         440 Load 481(textureAlbedo)
+             489:         155 Load 486(samplerAlbedo)
+             490:         452 SampledImage 484 489
+             491:   22(fvec2) Load 88(inUV)
+             492:   17(fvec4) ImageSampleImplicitLod 490 491
+                              Store 476(albedo) 492
+             494:    493(ptr) AccessChain 410 280 360
+             495:    208(int) Load 494
+             497:   127(bool) SGreaterThan 495 280
+                              SelectionMerge 499 None
+                              BranchConditional 497 498 499
+             498:               Label
+             500:    493(ptr)   AccessChain 410 280 360
+             501:    208(int)   Load 500
+                                SelectionMerge 507 None
+                                Switch 501 507 
+                                       case 1: 502
+                                       case 2: 503
+                                       case 3: 504
+                                       case 4: 505
+                                       case 5: 506
+             502:                 Label
+             511:           3     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 509 508(fragcolor) 45
+                                  Store 513(param) 512
+             515:   67(fvec3)     Load 436(fragPos)
+                                  Store 514(param) 515
+             516:   67(fvec3)     FunctionCall 74(shadow(vf3;vf3;) 513(param) 514(param)
+                                  Store 508(fragcolor) 516
+                                  Branch 507
+             503:                 Label
+             518:   67(fvec3)     Load 436(fragPos)
+                                  Store 508(fragcolor) 518
+                                  Branch 507
+             504:                 Label
+             520:   67(fvec3)     Load 458(normal)
+                                  Store 508(fragcolor) 520
+                                  Branch 507
+             505:                 Label
+             522:   17(fvec4)     Load 476(albedo)
+             523:   67(fvec3)     VectorShuffle 522 522 0 1 2
+                                  Store 508(fragcolor) 523
+                                  Branch 507
+             506:                 Label
+             525:   17(fvec4)     Load 476(albedo)
+             526:   67(fvec3)     VectorShuffle 525 525 3 3 3
+                                  Store 508(fragcolor) 526
+                                  Branch 507
+             507:               Label
+             529:   67(fvec3)   Load 508(fragcolor)
+             530:    7(float)   CompositeExtract 529 0
+             531:    7(float)   CompositeExtract 529 1
+             532:    7(float)   CompositeExtract 529 2
+             533:   17(fvec4)   CompositeConstruct 530 531 532 103
+                                ReturnValue 533
+             499:             Label
+             535:   17(fvec4) Load 476(albedo)
+             536:   67(fvec3) VectorShuffle 535 535 0 1 2
+             538:   67(fvec3) VectorTimesScalar 536 537
+                              Store 508(fragcolor) 538
+             543:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 540 539(N) 45
+             544:   67(fvec3) Load 458(normal)
+             545:   67(fvec3) ExtInst 2(GLSL.std.450) 69(Normalize) 544
+                              Store 539(N) 545
+             549:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 547 546(i) 45
+                              Store 546(i) 280
+                              Branch 550
+             550:             Label
+                              LoopMerge 552 553 None
+                              Branch 554
+             554:             Label
+             555:    208(int) Load 546(i)
+             557:   127(bool) SLessThan 555 360
+                              BranchConditional 557 551 552
+             551:               Label
+             562:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 559 558(L) 45
+             563:    208(int)   Load 546(i)
+             565:    564(ptr)   AccessChain 410 280 286 563 280
+             566:   17(fvec4)   Load 565
+             567:   67(fvec3)   VectorShuffle 566 566 0 1 2
+             568:   67(fvec3)   Load 436(fragPos)
+             569:   67(fvec3)   FSub 567 568
+                                Store 558(L) 569
+             573:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 571 570(dist) 45
+             574:   67(fvec3)   Load 558(L)
+             575:    7(float)   ExtInst 2(GLSL.std.450) 66(Length) 574
+                                Store 570(dist) 575
+             576:   67(fvec3)   Load 558(L)
+             577:   67(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 576
+                                Store 558(L) 577
+             582:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 579 578(V) 45
+             583:    564(ptr)   AccessChain 410 280 280
+             584:   17(fvec4)   Load 583
+             585:   67(fvec3)   VectorShuffle 584 584 0 1 2
+             586:   67(fvec3)   Load 436(fragPos)
+             587:   67(fvec3)   FSub 585 586
+                                Store 578(V) 587
+             588:   67(fvec3)   Load 578(V)
+             589:   67(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 588
+                                Store 578(V) 589
+             594:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 591 590(lightCosInnerAngle) 45
+                                Store 590(lightCosInnerAngle) 595
+             600:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 597 596(lightCosOuterAngle) 45
+                                Store 596(lightCosOuterAngle) 601
+             606:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 603 602(lightRange) 45
+                                Store 602(lightRange) 607
+             612:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 609 608(dir) 45
+             613:    208(int)   Load 546(i)
+             614:    564(ptr)   AccessChain 410 280 286 613 280
+             615:   17(fvec4)   Load 614
+             616:   67(fvec3)   VectorShuffle 615 615 0 1 2
+             617:    208(int)   Load 546(i)
+             618:    564(ptr)   AccessChain 410 280 286 617 286
+             619:   17(fvec4)   Load 618
+             620:   67(fvec3)   VectorShuffle 619 619 0 1 2
+             621:   67(fvec3)   FSub 616 620
+             622:   67(fvec3)   ExtInst 2(GLSL.std.450) 69(Normalize) 621
+                                Store 608(dir) 622
+             627:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 624 623(cosDir) 45
+             628:   67(fvec3)   Load 558(L)
+             629:   67(fvec3)   Load 608(dir)
+             630:    7(float)   Dot 628 629
+                                Store 623(cosDir) 630
+             635:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 632 631(spotEffect) 45
+             636:    7(float)   Load 596(lightCosOuterAngle)
+             637:    7(float)   Load 590(lightCosInnerAngle)
+             638:    7(float)   Load 623(cosDir)
+             639:    7(float)   ExtInst 2(GLSL.std.450) 49(SmoothStep) 636 637 638
+                                Store 631(spotEffect) 639
+             644:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 641 640(heightAttenuation) 45
+             645:    7(float)   Load 602(lightRange)
+             646:    7(float)   Load 570(dist)
+             647:    7(float)   ExtInst 2(GLSL.std.450) 49(SmoothStep) 645 181 646
+                                Store 640(heightAttenuation) 647
+             652:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 649 648(NdotL) 45
+             653:   67(fvec3)   Load 539(N)
+             654:   67(fvec3)   Load 558(L)
+             655:    7(float)   Dot 653 654
+             656:    7(float)   ExtInst 2(GLSL.std.450) 40(FMax) 181 655
+                                Store 648(NdotL) 656
+             661:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 658 657(diff) 45
+             662:    7(float)   Load 648(NdotL)
+             663:   67(fvec3)   CompositeConstruct 662 662 662
+                                Store 657(diff) 663
+             668:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 665 664(R) 45
+             669:   67(fvec3)   Load 558(L)
+             670:   67(fvec3)   FNegate 669
+             671:   67(fvec3)   Load 539(N)
+             672:   67(fvec3)   ExtInst 2(GLSL.std.450) 71(Reflect) 670 671
+                                Store 664(R) 672
+             677:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 674 673(NdotR) 45
+             678:   67(fvec3)   Load 664(R)
+             679:   67(fvec3)   Load 578(V)
+             680:    7(float)   Dot 678 679
+             681:    7(float)   ExtInst 2(GLSL.std.450) 40(FMax) 181 680
+                                Store 673(NdotR) 681
+             686:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 683 682(spec) 45
+             687:    7(float)   Load 673(NdotR)
+             689:    7(float)   ExtInst 2(GLSL.std.450) 26(Pow) 687 688
+             690:     21(ptr)   AccessChain 476(albedo) 16
+             691:    7(float)   Load 690
+             692:    7(float)   FMul 689 691
+             694:    7(float)   FMul 692 693
+             695:   67(fvec3)   CompositeConstruct 694 694 694
+                                Store 682(spec) 695
+             696:   67(fvec3)   Load 657(diff)
+             697:   67(fvec3)   Load 682(spec)
+             698:   67(fvec3)   FAdd 696 697
+             699:    7(float)   Load 631(spotEffect)
+             700:   67(fvec3)   VectorTimesScalar 698 699
+             701:    7(float)   Load 640(heightAttenuation)
+             702:   67(fvec3)   VectorTimesScalar 700 701
+             703:    208(int)   Load 546(i)
+             705:    564(ptr)   AccessChain 410 280 286 703 704
+             706:   17(fvec4)   Load 705
+             707:   67(fvec3)   VectorShuffle 706 706 0 1 2
+             708:   67(fvec3)   FMul 702 707
+             709:   17(fvec4)   Load 476(albedo)
+             710:   67(fvec3)   VectorShuffle 709 709 0 1 2
+             711:   67(fvec3)   FMul 708 710
+             712:   67(fvec3)   Load 508(fragcolor)
+             713:   67(fvec3)   FAdd 712 711
+                                Store 508(fragcolor) 713
+                                Branch 553
+             553:               Label
+             714:    208(int)   Load 546(i)
+             715:    208(int)   IAdd 714 286
+                                Store 546(i) 715
+                                Branch 550
+             552:             Label
+             716:    493(ptr) AccessChain 410 280 704
+             717:    208(int) Load 716
+             719:   127(bool) SGreaterThan 717 280
+                              SelectionMerge 721 None
+                              BranchConditional 719 720 721
+             720:               Label
+             723:   67(fvec3)   Load 508(fragcolor)
+                                Store 722(param) 723
+             725:   67(fvec3)   Load 436(fragPos)
+                                Store 724(param) 725
+             726:   67(fvec3)   FunctionCall 74(shadow(vf3;vf3;) 722(param) 724(param)
+                                Store 508(fragcolor) 726
+                                Branch 721
+             721:             Label
+             727:   67(fvec3) Load 508(fragcolor)
+             728:    7(float) CompositeExtract 727 0
+             729:    7(float) CompositeExtract 727 1
+             730:    7(float) CompositeExtract 727 2
+             731:   17(fvec4) CompositeConstruct 728 729 730 103
+                              ReturnValue 731
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.geom.out b/Test/baseResults/spv.debuginfo.hlsl.geom.out
new file mode 100644
index 0000000..c747d3a
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.hlsl.geom.out
@@ -0,0 +1,458 @@
+spv.debuginfo.hlsl.geom
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 322
+
+                              Capability Geometry
+                              Capability MultiViewport
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 5  "main" 228 235 240 246 251 256 261 271 278 283 307 310
+                              ExecutionMode 5 Triangles
+                              ExecutionMode 5 Invocations 2
+                              ExecutionMode 5 OutputTriangleStrip
+                              ExecutionMode 5 OutputVertices 3
+               9:             String  "float"
+              12:             String  "uint"
+              24:             String  "Pos"
+              26:             String  ""
+              30:             String  "Color"
+              35:             String  "VSOutput"
+              46:             String  "PrimitiveID"
+              51:             String  "LightVec"
+              57:             String  "GSOutput"
+              67:             String  "@main"
+              73:             String  "input"
+              77:             String  "outStream"
+              81:             String  "InvocationID"
+              87:             String  "int"
+              92:             String  "i"
+             104:             String  "bool"
+             109:             String  "output"
+             130:             String  "projection"
+             134:             String  "modelview"
+             138:             String  "lightPos"
+             142:             String  "UBO"
+             146:             String  "ubo"
+             177:             String  "pos"
+             185:             String  "worldPos"
+             195:             String  "lPos"
+             230:             String  "outStream.Pos"
+             237:             String  "outStream.ViewportIndex"
+             242:             String  "outStream.PrimitiveID"
+             248:             String  "outStream.Normal"
+             253:             String  "outStream.Color"
+             258:             String  "outStream.ViewVec"
+             263:             String  "outStream.LightVec"
+                              Name 5  "main"
+                              Name 22  "VSOutput"
+                              MemberName 22(VSOutput) 0  "Pos"
+                              MemberName 22(VSOutput) 1  "Normal"
+                              MemberName 22(VSOutput) 2  "Color"
+                              Name 42  "GSOutput"
+                              MemberName 42(GSOutput) 0  "Pos"
+                              MemberName 42(GSOutput) 1  "ViewportIndex"
+                              MemberName 42(GSOutput) 2  "PrimitiveID"
+                              MemberName 42(GSOutput) 3  "Normal"
+                              MemberName 42(GSOutput) 4  "Color"
+                              MemberName 42(GSOutput) 5  "ViewVec"
+                              MemberName 42(GSOutput) 6  "LightVec"
+                              Name 66  "@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;"
+                              Name 62  "input"
+                              Name 63  "outStream"
+                              Name 64  "InvocationID"
+                              Name 65  "PrimitiveID"
+                              Name 90  "i"
+                              Name 107  "output"
+                              Name 128  "UBO"
+                              MemberName 128(UBO) 0  "projection"
+                              MemberName 128(UBO) 1  "modelview"
+                              MemberName 128(UBO) 2  "lightPos"
+                              Name 144  "ubo"
+                              MemberName 144(ubo) 0  "ubo"
+                              Name 150  ""
+                              Name 175  "pos"
+                              Name 183  "worldPos"
+                              Name 193  "lPos"
+                              Name 228  "outStream.Pos"
+                              Name 235  "outStream.ViewportIndex"
+                              Name 240  "outStream.PrimitiveID"
+                              Name 246  "outStream.Normal"
+                              Name 251  "outStream.Color"
+                              Name 256  "outStream.ViewVec"
+                              Name 261  "outStream.LightVec"
+                              Name 268  "input"
+                              Name 271  "input.Pos"
+                              Name 278  "input.Normal"
+                              Name 283  "input.Color"
+                              Name 305  "InvocationID"
+                              Name 307  "InvocationID"
+                              Name 309  "PrimitiveID"
+                              Name 310  "PrimitiveID"
+                              Name 312  "outStream"
+                              Name 313  "param"
+                              Name 315  "param"
+                              Name 316  "param"
+                              Name 318  "param"
+                              Decorate 124 ArrayStride 64
+                              Decorate 126 ArrayStride 64
+                              MemberDecorate 128(UBO) 0 RowMajor
+                              MemberDecorate 128(UBO) 0 Offset 0
+                              MemberDecorate 128(UBO) 0 MatrixStride 16
+                              MemberDecorate 128(UBO) 1 RowMajor
+                              MemberDecorate 128(UBO) 1 Offset 128
+                              MemberDecorate 128(UBO) 1 MatrixStride 16
+                              MemberDecorate 128(UBO) 2 Offset 256
+                              MemberDecorate 144(ubo) 0 Offset 0
+                              Decorate 144(ubo) Block
+                              Decorate 150 DescriptorSet 0
+                              Decorate 150 Binding 0
+                              Decorate 228(outStream.Pos) BuiltIn Position
+                              Decorate 235(outStream.ViewportIndex) BuiltIn ViewportIndex
+                              Decorate 240(outStream.PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 246(outStream.Normal) Location 0
+                              Decorate 251(outStream.Color) Location 1
+                              Decorate 256(outStream.ViewVec) Location 2
+                              Decorate 261(outStream.LightVec) Location 3
+                              Decorate 271(input.Pos) BuiltIn Position
+                              Decorate 278(input.Normal) Location 0
+                              Decorate 283(input.Color) Location 1
+                              Decorate 307(InvocationID) BuiltIn InvocationId
+                              Decorate 310(PrimitiveID) BuiltIn PrimitiveId
+               3:             TypeVoid
+               4:             TypeFunction 3
+               7:             TypeFloat 32
+              10:             TypeInt 32 0
+              13:     10(int) Constant 32
+              14:     10(int) Constant 6
+              15:     10(int) Constant 0
+              11:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 12 13 14 15
+              16:     10(int) Constant 3
+               8:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 9 13 16 15
+              17:             TypeVector 7(float) 4
+              18:     10(int) Constant 4
+              19:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 18
+              20:             TypeVector 7(float) 3
+              21:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 16
+    22(VSOutput):             TypeStruct 17(fvec4) 20(fvec3) 20(fvec3)
+              25:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 26
+              27:     10(int) Constant 37
+              28:     10(int) Constant 13
+              23:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 24 19 25 27 28 15 15 16
+              31:     10(int) Constant 39
+              32:     10(int) Constant 34
+              29:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 30 21 25 31 32 15 15 16
+              33:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 30 21 25 31 32 15 15 16
+              36:     10(int) Constant 1
+              38:     10(int) Constant 5
+              37:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 36 18 25 38
+              34:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 35 36 25 15 15 37 35 15 16 23 29 33
+              39:             TypeArray 22(VSOutput) 16
+              40:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 34 16
+              41:             TypePointer Function 39
+    42(GSOutput):             TypeStruct 17(fvec4) 10(int) 10(int) 20(fvec3) 20(fvec3) 20(fvec3) 20(fvec3)
+              44:     10(int) Constant 44
+              43:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 24 19 25 44 28 15 15 16
+              47:     10(int) Constant 46
+              48:     10(int) Constant 19
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 46 11 25 47 48 15 15 16
+              49:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 46 11 25 47 48 15 15 16
+              52:     10(int) Constant 50
+              50:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 51 21 25 52 27 15 15 16
+              53:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 51 21 25 52 27 15 15 16
+              54:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 51 21 25 52 27 15 15 16
+              55:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 51 21 25 52 27 15 15 16
+              56:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 57 36 25 15 15 37 57 15 16 43 45 49 50 53 54 55
+              58:             TypePointer Function 42(GSOutput)
+              59:             TypePointer Function 10(int)
+              60:             TypeFunction 3 41(ptr) 58(ptr) 59(ptr) 59(ptr)
+              61:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 3 40 56 11 11
+              68:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 67 61 25 15 15 37 67 16 15
+              72:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 73 40 25 15 15 68 18 36
+              75:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              78:     10(int) Constant 2
+              76:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 77 56 25 15 15 68 18 78
+              80:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 81 11 25 15 15 68 18 16
+              83:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 46 11 25 15 15 68 18 18
+              86:             TypeInt 32 1
+              88:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 87 13 18 15
+              89:             TypePointer Function 86(int)
+              93:     10(int) Constant 57
+              91:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 92 88 25 93 15 68 18
+              95:     86(int) Constant 0
+             102:     86(int) Constant 3
+             103:             TypeBool
+             105:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 104 13 78 15
+             110:     10(int) Constant 59
+             108:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 109 56 25 110 15 68 18
+             112:    7(float) Constant 0
+             113:   17(fvec4) ConstantComposite 112 112 112 112
+             114:   20(fvec3) ConstantComposite 112 112 112
+             115:42(GSOutput) ConstantComposite 113 15 15 114 114 114 114
+             117:     86(int) Constant 1
+             118:             TypePointer Function 20(fvec3)
+             121:             TypeMatrix 17(fvec4) 4
+             123:   103(bool) ConstantTrue
+             122:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 19 18 123
+             124:             TypeArray 121 78
+             125:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 122 78
+             126:             TypeArray 121 78
+             127:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 122 78
+        128(UBO):             TypeStruct 124 126 17(fvec4)
+             131:     10(int) Constant 28
+             132:     10(int) Constant 21
+             129:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 130 125 25 131 132 15 15 16
+             135:     10(int) Constant 29
+             136:     10(int) Constant 20
+             133:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 134 127 25 135 136 15 15 16
+             139:     10(int) Constant 30
+             140:     10(int) Constant 17
+             137:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 138 19 25 139 140 15 15 16
+             143:     10(int) Constant 60
+             141:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 142 36 25 143 15 37 142 15 16 129 133 137
+        144(ubo):             TypeStruct 128(UBO)
+             147:     10(int) Constant 33
+             145:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 146 141 25 147 27 15 15 16
+             148:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 146 36 25 143 15 37 146 15 16 145
+             149:             TypePointer Uniform 144(ubo)
+             150:    149(ptr) Variable Uniform
+             152:     10(int) Constant 8
+             151:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 26 148 25 143 15 37 26 150 152
+             154:             TypePointer Uniform 121
+             157:             TypeMatrix 20(fvec3) 3
+             158:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 21 16 123
+             168:     86(int) Constant 4
+             170:     86(int) Constant 2
+             174:             TypePointer Function 17(fvec4)
+             178:     10(int) Constant 63
+             176:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 177 19 25 178 15 68 18
+             186:     10(int) Constant 64
+             184:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 185 19 25 186 15 68 18
+             196:     10(int) Constant 66
+             194:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 195 21 25 196 15 68 18
+             198:             TypePointer Uniform 17(fvec4)
+             206:     86(int) Constant 6
+             212:     86(int) Constant 5
+             227:             TypePointer Output 17(fvec4)
+228(outStream.Pos):    227(ptr) Variable Output
+             231:     10(int) Constant 75
+             229:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 230 19 25 231 15 37 230 228(outStream.Pos) 152
+             234:             TypePointer Output 10(int)
+235(outStream.ViewportIndex):    234(ptr) Variable Output
+             236:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 237 11 25 231 15 37 237 235(outStream.ViewportIndex) 152
+240(outStream.PrimitiveID):    234(ptr) Variable Output
+             241:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 242 11 25 231 15 37 242 240(outStream.PrimitiveID) 152
+             245:             TypePointer Output 20(fvec3)
+246(outStream.Normal):    245(ptr) Variable Output
+             247:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 248 21 25 231 15 37 248 246(outStream.Normal) 152
+251(outStream.Color):    245(ptr) Variable Output
+             252:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 253 21 25 231 15 37 253 251(outStream.Color) 152
+256(outStream.ViewVec):    245(ptr) Variable Output
+             257:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 258 21 25 231 15 37 258 256(outStream.ViewVec) 152
+261(outStream.LightVec):    245(ptr) Variable Output
+             262:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 263 21 25 231 15 37 263 261(outStream.LightVec) 152
+             269:             TypeArray 17(fvec4) 16
+             270:             TypePointer Input 269
+  271(input.Pos):    270(ptr) Variable Input
+             272:             TypePointer Input 17(fvec4)
+             276:             TypeArray 20(fvec3) 16
+             277:             TypePointer Input 276
+278(input.Normal):    277(ptr) Variable Input
+             279:             TypePointer Input 20(fvec3)
+283(input.Color):    277(ptr) Variable Input
+             306:             TypePointer Input 10(int)
+307(InvocationID):    306(ptr) Variable Input
+310(PrimitiveID):    306(ptr) Variable Input
+         5(main):           3 Function None 4
+               6:             Label
+      268(input):     41(ptr) Variable Function
+305(InvocationID):     59(ptr) Variable Function
+309(PrimitiveID):     59(ptr) Variable Function
+  312(outStream):     58(ptr) Variable Function
+      313(param):     41(ptr) Variable Function
+      315(param):     58(ptr) Variable Function
+      316(param):     59(ptr) Variable Function
+      318(param):     59(ptr) Variable Function
+             273:    272(ptr) AccessChain 271(input.Pos) 95
+             274:   17(fvec4) Load 273
+             275:    174(ptr) AccessChain 268(input) 95 95
+                              Store 275 274
+             280:    279(ptr) AccessChain 278(input.Normal) 95
+             281:   20(fvec3) Load 280
+             282:    118(ptr) AccessChain 268(input) 95 117
+                              Store 282 281
+             284:    279(ptr) AccessChain 283(input.Color) 95
+             285:   20(fvec3) Load 284
+             286:    118(ptr) AccessChain 268(input) 95 170
+                              Store 286 285
+             287:    272(ptr) AccessChain 271(input.Pos) 117
+             288:   17(fvec4) Load 287
+             289:    174(ptr) AccessChain 268(input) 117 95
+                              Store 289 288
+             290:    279(ptr) AccessChain 278(input.Normal) 117
+             291:   20(fvec3) Load 290
+             292:    118(ptr) AccessChain 268(input) 117 117
+                              Store 292 291
+             293:    279(ptr) AccessChain 283(input.Color) 117
+             294:   20(fvec3) Load 293
+             295:    118(ptr) AccessChain 268(input) 117 170
+                              Store 295 294
+             296:    272(ptr) AccessChain 271(input.Pos) 170
+             297:   17(fvec4) Load 296
+             298:    174(ptr) AccessChain 268(input) 170 95
+                              Store 298 297
+             299:    279(ptr) AccessChain 278(input.Normal) 170
+             300:   20(fvec3) Load 299
+             301:    118(ptr) AccessChain 268(input) 170 117
+                              Store 301 300
+             302:    279(ptr) AccessChain 283(input.Color) 170
+             303:   20(fvec3) Load 302
+             304:    118(ptr) AccessChain 268(input) 170 170
+                              Store 304 303
+             308:     10(int) Load 307(InvocationID)
+                              Store 305(InvocationID) 308
+             311:     10(int) Load 310(PrimitiveID)
+                              Store 309(PrimitiveID) 311
+             314:          39 Load 268(input)
+                              Store 313(param) 314
+             317:     10(int) Load 305(InvocationID)
+                              Store 316(param) 317
+             319:     10(int) Load 309(PrimitiveID)
+                              Store 318(param) 319
+             320:           3 FunctionCall 66(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;) 313(param) 315(param) 316(param) 318(param)
+             321:42(GSOutput) Load 315(param)
+                              Store 312(outStream) 321
+                              Return
+                              FunctionEnd
+66(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;):           3 Function None 60
+       62(input):     41(ptr) FunctionParameter
+   63(outStream):     58(ptr) FunctionParameter
+64(InvocationID):     59(ptr) FunctionParameter
+ 65(PrimitiveID):     59(ptr) FunctionParameter
+              69:             Label
+           90(i):     89(ptr) Variable Function
+     107(output):     58(ptr) Variable Function
+        175(pos):    174(ptr) Variable Function
+   183(worldPos):    174(ptr) Variable Function
+       193(lPos):    118(ptr) Variable Function
+              70:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 68
+              71:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 25 15 15 15 15
+              74:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 72 62(input) 75
+              79:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 76 63(outStream) 75
+              82:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 80 64(InvocationID) 75
+              84:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 83 65(PrimitiveID) 75
+              85:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 68 66(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;)
+              94:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 91 90(i) 75
+                              Store 90(i) 95
+                              Branch 96
+              96:             Label
+                              LoopMerge 98 99 None
+                              Branch 100
+             100:             Label
+             101:     86(int) Load 90(i)
+             106:   103(bool) SLessThan 101 102
+                              BranchConditional 106 97 98
+              97:               Label
+             111:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 108 107(output) 75
+                                Store 107(output) 115
+             116:     86(int)   Load 90(i)
+             119:    118(ptr)   AccessChain 62(input) 116 117
+             120:   20(fvec3)   Load 119
+             153:     10(int)   Load 64(InvocationID)
+             155:    154(ptr)   AccessChain 150 95 117 153
+             156:         121   Load 155
+             159:   17(fvec4)   CompositeExtract 156 0
+             160:   20(fvec3)   VectorShuffle 159 159 0 1 2
+             161:   17(fvec4)   CompositeExtract 156 1
+             162:   20(fvec3)   VectorShuffle 161 161 0 1 2
+             163:   17(fvec4)   CompositeExtract 156 2
+             164:   20(fvec3)   VectorShuffle 163 163 0 1 2
+             165:         157   CompositeConstruct 160 162 164
+             166:   20(fvec3)   VectorTimesMatrix 120 165
+             167:    118(ptr)   AccessChain 107(output) 102
+                                Store 167 166
+             169:     86(int)   Load 90(i)
+             171:    118(ptr)   AccessChain 62(input) 169 170
+             172:   20(fvec3)   Load 171
+             173:    118(ptr)   AccessChain 107(output) 168
+                                Store 173 172
+             179:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 176 175(pos) 75
+             180:     86(int)   Load 90(i)
+             181:    174(ptr)   AccessChain 62(input) 180 95
+             182:   17(fvec4)   Load 181
+                                Store 175(pos) 182
+             187:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 184 183(worldPos) 75
+             188:   17(fvec4)   Load 175(pos)
+             189:     10(int)   Load 64(InvocationID)
+             190:    154(ptr)   AccessChain 150 95 117 189
+             191:         121   Load 190
+             192:   17(fvec4)   VectorTimesMatrix 188 191
+                                Store 183(worldPos) 192
+             197:           3   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 194 193(lPos) 75
+             199:    198(ptr)   AccessChain 150 95 170
+             200:   17(fvec4)   Load 199
+             201:     10(int)   Load 64(InvocationID)
+             202:    154(ptr)   AccessChain 150 95 117 201
+             203:         121   Load 202
+             204:   17(fvec4)   VectorTimesMatrix 200 203
+             205:   20(fvec3)   VectorShuffle 204 204 0 1 2
+                                Store 193(lPos) 205
+             207:   20(fvec3)   Load 193(lPos)
+             208:   17(fvec4)   Load 183(worldPos)
+             209:   20(fvec3)   VectorShuffle 208 208 0 1 2
+             210:   20(fvec3)   FSub 207 209
+             211:    118(ptr)   AccessChain 107(output) 206
+                                Store 211 210
+             213:   17(fvec4)   Load 183(worldPos)
+             214:   20(fvec3)   VectorShuffle 213 213 0 1 2
+             215:   20(fvec3)   FNegate 214
+             216:    118(ptr)   AccessChain 107(output) 212
+                                Store 216 215
+             217:   17(fvec4)   Load 183(worldPos)
+             218:     10(int)   Load 64(InvocationID)
+             219:    154(ptr)   AccessChain 150 95 95 218
+             220:         121   Load 219
+             221:   17(fvec4)   VectorTimesMatrix 217 220
+             222:    174(ptr)   AccessChain 107(output) 95
+                                Store 222 221
+             223:     10(int)   Load 64(InvocationID)
+             224:     59(ptr)   AccessChain 107(output) 117
+                                Store 224 223
+             225:     10(int)   Load 65(PrimitiveID)
+             226:     59(ptr)   AccessChain 107(output) 170
+                                Store 226 225
+             232:    174(ptr)   AccessChain 107(output) 95
+             233:   17(fvec4)   Load 232
+                                Store 228(outStream.Pos) 233
+             238:     59(ptr)   AccessChain 107(output) 117
+             239:     10(int)   Load 238
+                                Store 235(outStream.ViewportIndex) 239
+             243:     59(ptr)   AccessChain 107(output) 170
+             244:     10(int)   Load 243
+                                Store 240(outStream.PrimitiveID) 244
+             249:    118(ptr)   AccessChain 107(output) 102
+             250:   20(fvec3)   Load 249
+                                Store 246(outStream.Normal) 250
+             254:    118(ptr)   AccessChain 107(output) 168
+             255:   20(fvec3)   Load 254
+                                Store 251(outStream.Color) 255
+             259:    118(ptr)   AccessChain 107(output) 212
+             260:   20(fvec3)   Load 259
+                                Store 256(outStream.ViewVec) 260
+             264:    118(ptr)   AccessChain 107(output) 206
+             265:   20(fvec3)   Load 264
+                                Store 261(outStream.LightVec) 265
+                                EmitVertex
+                                Branch 99
+              99:               Label
+             266:     86(int)   Load 90(i)
+             267:     86(int)   IAdd 266 117
+                                Store 90(i) 267
+                                Branch 96
+              98:             Label
+                              EndPrimitive
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.tesc.out b/Test/baseResults/spv.debuginfo.hlsl.tesc.out
new file mode 100644
index 0000000..a389bba
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.hlsl.tesc.out
@@ -0,0 +1,809 @@
+spv.debuginfo.hlsl.tesc
+WARNING: 0:158: '' : attribute does not apply to entry point 
+
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 593
+
+                              Capability Tessellation
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 5  "main" 485 492 499 533 542 549 556 571 586
+                              ExecutionMode 5 OutputVertices 4
+                              ExecutionMode 5 Quads
+                              ExecutionMode 5 SpacingEqual
+                              ExecutionMode 5 VertexOrderCw
+               9:             String  "float"
+              12:             String  "uint"
+              26:             String  "screenSpaceTessFactor"
+              29:             String  ""
+              37:             String  "p0"
+              41:             String  "p1"
+              48:             String  "bool"
+              55:             String  "frustumCheck"
+              61:             String  "Pos"
+              64:             String  "inUV"
+              73:             String  "Normal"
+              77:             String  "UV"
+              81:             String  "VSOutput"
+              91:             String  "TessLevelOuter"
+              95:             String  "TessLevelInner"
+              98:             String  "ConstantsHSOutput"
+             103:             String  "ConstantsHS"
+             109:             String  "patch"
+             120:             String  "HSOutput"
+             126:             String  "@main"
+             134:             String  "InvocationID"
+             139:             String  "midPoint"
+             150:             String  "radius"
+             160:             String  "v0"
+             171:             String  "modelview"
+             176:             String  "lightPos"
+             180:             String  "frustumPlanes"
+             183:             String  "tessellatedEdgeSize"
+             187:             String  "viewportDim"
+             191:             String  "UBO"
+             194:             String  "ubo"
+             202:             String  "int"
+             212:             String  "clip0"
+             229:             String  "clip1"
+             292:             String  "pos"
+             298:             String  "type.2d.image"
+             300:             String  "@type.2d.image"
+             305:             String  "textureHeight"
+             309:             String  "type.sampler"
+             310:             String  "@type.sampler"
+             314:             String  "samplerHeight"
+             318:             String  "type.sampled.image"
+             319:             String  "@type.sampled.image"
+             335:             String  "i"
+             371:             String  "output"
+                              Name 5  "main"
+                              Name 25  "screenSpaceTessFactor(vf4;vf4;"
+                              Name 23  "p0"
+                              Name 24  "p1"
+                              Name 54  "frustumCheck(vf4;vf2;"
+                              Name 52  "Pos"
+                              Name 53  "inUV"
+                              Name 68  "VSOutput"
+                              MemberName 68(VSOutput) 0  "Pos"
+                              MemberName 68(VSOutput) 1  "Normal"
+                              MemberName 68(VSOutput) 2  "UV"
+                              Name 89  "ConstantsHSOutput"
+                              MemberName 89(ConstantsHSOutput) 0  "TessLevelOuter"
+                              MemberName 89(ConstantsHSOutput) 1  "TessLevelInner"
+                              Name 102  "ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];"
+                              Name 101  "patch"
+                              Name 112  "HSOutput"
+                              MemberName 112(HSOutput) 0  "Pos"
+                              MemberName 112(HSOutput) 1  "Normal"
+                              MemberName 112(HSOutput) 2  "UV"
+                              Name 125  "@main(struct-VSOutput-vf4-vf3-vf21[4];u1;"
+                              Name 123  "patch"
+                              Name 124  "InvocationID"
+                              Name 137  "midPoint"
+                              Name 148  "radius"
+                              Name 158  "v0"
+                              Name 169  "UBO"
+                              MemberName 169(UBO) 0  "projection"
+                              MemberName 169(UBO) 1  "modelview"
+                              MemberName 169(UBO) 2  "lightPos"
+                              MemberName 169(UBO) 3  "frustumPlanes"
+                              MemberName 169(UBO) 4  "displacementFactor"
+                              MemberName 169(UBO) 5  "tessellationFactor"
+                              MemberName 169(UBO) 6  "viewportDim"
+                              MemberName 169(UBO) 7  "tessellatedEdgeSize"
+                              Name 192  "ubo"
+                              MemberName 192(ubo) 0  "ubo"
+                              Name 198  ""
+                              Name 210  "clip0"
+                              Name 227  "clip1"
+                              Name 290  "pos"
+                              Name 303  "textureHeight"
+                              Name 312  "samplerHeight"
+                              Name 333  "i"
+                              Name 369  "output"
+                              Name 378  "param"
+                              Name 381  "param"
+                              Name 403  "param"
+                              Name 406  "param"
+                              Name 411  "param"
+                              Name 414  "param"
+                              Name 419  "param"
+                              Name 422  "param"
+                              Name 427  "param"
+                              Name 430  "param"
+                              Name 459  "output"
+                              Name 482  "patch"
+                              Name 485  "patch.Pos"
+                              Name 492  "patch.Normal"
+                              Name 499  "patch.UV"
+                              Name 531  "InvocationID"
+                              Name 533  "InvocationID"
+                              Name 535  "flattenTemp"
+                              Name 536  "param"
+                              Name 538  "param"
+                              Name 542  "@entryPointOutput.Pos"
+                              Name 549  "@entryPointOutput.Normal"
+                              Name 556  "@entryPointOutput.UV"
+                              Name 566  "@patchConstantResult"
+                              Name 567  "param"
+                              Name 571  "@patchConstantOutput.TessLevelOuter"
+                              Name 586  "@patchConstantOutput.TessLevelInner"
+                              Decorate 167 ArrayStride 16
+                              MemberDecorate 169(UBO) 0 RowMajor
+                              MemberDecorate 169(UBO) 0 Offset 0
+                              MemberDecorate 169(UBO) 0 MatrixStride 16
+                              MemberDecorate 169(UBO) 1 RowMajor
+                              MemberDecorate 169(UBO) 1 Offset 64
+                              MemberDecorate 169(UBO) 1 MatrixStride 16
+                              MemberDecorate 169(UBO) 2 Offset 128
+                              MemberDecorate 169(UBO) 3 Offset 144
+                              MemberDecorate 169(UBO) 4 Offset 240
+                              MemberDecorate 169(UBO) 5 Offset 244
+                              MemberDecorate 169(UBO) 6 Offset 248
+                              MemberDecorate 169(UBO) 7 Offset 256
+                              MemberDecorate 192(ubo) 0 Offset 0
+                              Decorate 192(ubo) Block
+                              Decorate 198 DescriptorSet 0
+                              Decorate 198 Binding 0
+                              Decorate 303(textureHeight) DescriptorSet 0
+                              Decorate 303(textureHeight) Binding 1
+                              Decorate 312(samplerHeight) DescriptorSet 0
+                              Decorate 312(samplerHeight) Binding 1
+                              Decorate 485(patch.Pos) BuiltIn Position
+                              Decorate 492(patch.Normal) Location 0
+                              Decorate 499(patch.UV) Location 1
+                              Decorate 533(InvocationID) BuiltIn InvocationId
+                              Decorate 542(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 549(@entryPointOutput.Normal) Location 0
+                              Decorate 556(@entryPointOutput.UV) Location 1
+                              Decorate 571(@patchConstantOutput.TessLevelOuter) Patch
+                              Decorate 571(@patchConstantOutput.TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 586(@patchConstantOutput.TessLevelInner) Patch
+                              Decorate 586(@patchConstantOutput.TessLevelInner) BuiltIn TessLevelInner
+               3:             TypeVoid
+               4:             TypeFunction 3
+               7:             TypeFloat 32
+              10:             TypeInt 32 0
+              13:     10(int) Constant 32
+              14:     10(int) Constant 6
+              15:     10(int) Constant 0
+              11:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 12 13 14 15
+              16:     10(int) Constant 3
+               8:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 9 13 16 15
+              17:             TypeVector 7(float) 4
+              18:     10(int) Constant 4
+              19:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 18
+              20:             TypePointer Function 17(fvec4)
+              21:             TypeFunction 7(float) 20(ptr) 20(ptr)
+              22:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 8 19 19
+              28:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 29
+              31:     10(int) Constant 1
+              32:     10(int) Constant 5
+              30:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 31 18 28 32
+              27:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 26 22 28 15 15 30 26 16 15
+              36:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 37 19 28 15 15 27 18 31
+              39:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              42:     10(int) Constant 2
+              40:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 41 19 28 15 15 27 18 42
+              44:             TypeVector 7(float) 2
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 42
+              46:             TypePointer Function 44(fvec2)
+              47:             TypeBool
+              49:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 48 13 42 15
+              50:             TypeFunction 47(bool) 20(ptr) 46(ptr)
+              51:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 49 19 45
+              56:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 55 51 28 15 15 30 55 16 15
+              60:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 61 19 28 15 15 56 18 31
+              63:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 64 45 28 15 15 56 18 42
+              66:             TypeVector 7(float) 3
+              67:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 16
+    68(VSOutput):             TypeStruct 17(fvec4) 66(fvec3) 44(fvec2)
+              70:     10(int) Constant 44
+              71:     10(int) Constant 13
+              69:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 61 19 28 70 71 15 15 16
+              74:     10(int) Constant 45
+              75:     10(int) Constant 35
+              72:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 73 67 28 74 75 15 15 16
+              78:     10(int) Constant 46
+              79:     10(int) Constant 31
+              76:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 77 45 28 78 79 15 15 16
+              80:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 81 31 28 15 15 30 81 15 16 69 72 76
+              82:             TypeArray 68(VSOutput) 18
+              83:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 80 18
+              84:             TypePointer Function 82
+              85:             TypeArray 7(float) 18
+              86:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 8 18
+              87:             TypeArray 7(float) 42
+              88:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 8 42
+89(ConstantsHSOutput):             TypeStruct 85 87
+              92:     10(int) Constant 58
+              93:     10(int) Constant 25
+              90:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 91 86 28 92 93 15 15 16
+              96:     10(int) Constant 59
+              94:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 95 88 28 96 93 15 15 16
+              97:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 98 31 28 15 15 30 98 15 16 90 94
+              99:             TypeFunction 89(ConstantsHSOutput) 84(ptr)
+             100:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 97 83
+             104:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 103 100 28 15 15 30 103 16 15
+             108:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 109 83 28 15 15 104 18 31
+             111:             TypePointer Function 10(int)
+   112(HSOutput):             TypeStruct 17(fvec4) 66(fvec3) 44(fvec2)
+             114:     10(int) Constant 51
+             113:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 61 19 28 114 13 15 15 16
+             116:     10(int) Constant 52
+             115:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 73 67 28 116 75 15 15 16
+             118:     10(int) Constant 53
+             117:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 77 45 28 118 79 15 15 16
+             119:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 120 31 28 15 15 30 120 15 16 113 115 117
+             121:             TypeFunction 112(HSOutput) 84(ptr) 111(ptr)
+             122:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 119 83 11
+             127:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 126 122 28 15 15 30 126 16 15
+             131:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 109 83 28 15 15 127 18 31
+             133:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 134 11 28 15 15 127 18 42
+             140:     10(int) Constant 67
+             138:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 139 19 28 140 15 27 18
+             142:    7(float) Constant 1056964608
+             147:             TypePointer Function 7(float)
+             151:     10(int) Constant 69
+             149:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 150 8 28 151 15 27 18
+             156:    7(float) Constant 1073741824
+             161:     10(int) Constant 72
+             159:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 160 19 28 161 15 27 18
+             164:             TypeMatrix 17(fvec4) 4
+             166:    47(bool) ConstantTrue
+             165:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 19 18 166
+             167:             TypeArray 17(fvec4) 14
+             168:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 19 14
+        169(UBO):             TypeStruct 164 164 17(fvec4) 167 7(float) 7(float) 44(fvec2) 7(float)
+             172:     10(int) Constant 29
+             173:     10(int) Constant 20
+             170:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 171 165 28 172 173 15 15 16
+             174:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 171 165 28 172 173 15 15 16
+             177:     10(int) Constant 30
+             178:     10(int) Constant 17
+             175:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 176 19 28 177 178 15 15 16
+             181:     10(int) Constant 22
+             179:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 180 168 28 79 181 15 15 16
+             184:     10(int) Constant 27
+             182:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 183 8 28 75 184 15 15 16
+             185:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 183 8 28 75 184 15 15 16
+             188:     10(int) Constant 34
+             186:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 187 45 28 188 173 15 15 16
+             189:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 183 8 28 75 184 15 15 16
+             190:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 191 31 28 161 15 30 191 15 16 170 174 175 179 182 185 186 189
+        192(ubo):             TypeStruct 169(UBO)
+             195:     10(int) Constant 37
+             193:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 194 190 28 195 195 15 15 16
+             196:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 194 31 28 161 15 30 194 15 16 193
+             197:             TypePointer Uniform 192(ubo)
+             198:    197(ptr) Variable Uniform
+             200:     10(int) Constant 8
+             199:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 29 196 28 161 15 30 29 198 200
+             201:             TypeInt 32 1
+             203:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 202 13 18 15
+             204:    201(int) Constant 0
+             205:    201(int) Constant 1
+             206:             TypePointer Uniform 164
+             213:     10(int) Constant 75
+             211:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 212 19 28 213 15 27 18
+             217:    7(float) Constant 0
+             218:   66(fvec3) ConstantComposite 217 217 217
+             230:     10(int) Constant 76
+             228:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 229 19 28 230 15 27 18
+             252:    201(int) Constant 6
+             253:             TypePointer Uniform 44(fvec2)
+             275:    201(int) Constant 7
+             276:             TypePointer Uniform 7(float)
+             280:    201(int) Constant 5
+             284:    7(float) Constant 1065353216
+             285:    7(float) Constant 1115684864
+             293:     10(int) Constant 98
+             291:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 292 19 28 293 15 56 18
+             296:             TypeImage 7(float) 2D sampled format:Unknown
+             299:     10(int) Constant 99
+             301:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(Unknown)
+             297:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 298 15 28 299 15 30 300 301 16
+             302:             TypePointer UniformConstant 296
+303(textureHeight):    302(ptr) Variable UniformConstant
+             304:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 305 297 28 299 15 30 305 303(textureHeight) 200
+             307:             TypeSampler
+             308:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 309 31 28 299 15 30 310 301 16
+             311:             TypePointer UniformConstant 307
+312(samplerHeight):    311(ptr) Variable UniformConstant
+             313:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 314 308 28 299 15 30 314 312(samplerHeight) 200
+             316:             TypeSampledImage 296
+             317:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 318 15 28 299 15 30 319 301 16
+             324:    201(int) Constant 4
+             332:             TypePointer Function 201(int)
+             336:     10(int) Constant 102
+             334:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 335 203 28 336 15 56 18
+             344:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 48 13 42 15
+             347:    201(int) Constant 3
+             349:             TypePointer Uniform 17(fvec4)
+             353:    7(float) Constant 1090519040
+             355:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 48 13 42 15
+             359:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 48 13 42 15
+             360:    47(bool) ConstantFalse
+             364:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 48 13 42 15
+             368:             TypePointer Function 89(ConstantsHSOutput)
+             372:     10(int) Constant 113
+             370:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 371 97 28 372 15 104 18
+             374:          85 ConstantComposite 217 217 217 217
+             375:          87 ConstantComposite 217 217
+             376:89(ConstantsHSOutput) ConstantComposite 374 375
+             377:    201(int) Constant 2
+             385:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 48 13 42 15
+             386:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 48 13 42 15
+             399:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 48 13 42 15
+             458:             TypePointer Function 112(HSOutput)
+             461:     10(int) Constant 159
+             460:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 371 119 28 461 15 127 18
+             463:   17(fvec4) ConstantComposite 217 217 217 217
+             464:   44(fvec2) ConstantComposite 217 217
+             465:112(HSOutput) ConstantComposite 463 218 464
+             471:             TypePointer Function 66(fvec3)
+             483:             TypeArray 17(fvec4) 18
+             484:             TypePointer Input 483
+  485(patch.Pos):    484(ptr) Variable Input
+             486:             TypePointer Input 17(fvec4)
+             490:             TypeArray 66(fvec3) 18
+             491:             TypePointer Input 490
+492(patch.Normal):    491(ptr) Variable Input
+             493:             TypePointer Input 66(fvec3)
+             497:             TypeArray 44(fvec2) 18
+             498:             TypePointer Input 497
+   499(patch.UV):    498(ptr) Variable Input
+             500:             TypePointer Input 44(fvec2)
+             532:             TypePointer Input 10(int)
+533(InvocationID):    532(ptr) Variable Input
+             541:             TypePointer Output 483
+542(@entryPointOutput.Pos):    541(ptr) Variable Output
+             546:             TypePointer Output 17(fvec4)
+             548:             TypePointer Output 490
+549(@entryPointOutput.Normal):    548(ptr) Variable Output
+             553:             TypePointer Output 66(fvec3)
+             555:             TypePointer Output 497
+556(@entryPointOutput.UV):    555(ptr) Variable Output
+             560:             TypePointer Output 44(fvec2)
+             570:             TypePointer Output 85
+571(@patchConstantOutput.TessLevelOuter):    570(ptr) Variable Output
+             574:             TypePointer Output 7(float)
+             585:             TypePointer Output 87
+586(@patchConstantOutput.TessLevelInner):    585(ptr) Variable Output
+         5(main):           3 Function None 4
+               6:             Label
+      482(patch):     84(ptr) Variable Function
+531(InvocationID):    111(ptr) Variable Function
+535(flattenTemp):    458(ptr) Variable Function
+      536(param):     84(ptr) Variable Function
+      538(param):    111(ptr) Variable Function
+566(@patchConstantResult):    368(ptr) Variable Function
+      567(param):     84(ptr) Variable Function
+             487:    486(ptr) AccessChain 485(patch.Pos) 204
+             488:   17(fvec4) Load 487
+             489:     20(ptr) AccessChain 482(patch) 204 204
+                              Store 489 488
+             494:    493(ptr) AccessChain 492(patch.Normal) 204
+             495:   66(fvec3) Load 494
+             496:    471(ptr) AccessChain 482(patch) 204 205
+                              Store 496 495
+             501:    500(ptr) AccessChain 499(patch.UV) 204
+             502:   44(fvec2) Load 501
+             503:     46(ptr) AccessChain 482(patch) 204 377
+                              Store 503 502
+             504:    486(ptr) AccessChain 485(patch.Pos) 205
+             505:   17(fvec4) Load 504
+             506:     20(ptr) AccessChain 482(patch) 205 204
+                              Store 506 505
+             507:    493(ptr) AccessChain 492(patch.Normal) 205
+             508:   66(fvec3) Load 507
+             509:    471(ptr) AccessChain 482(patch) 205 205
+                              Store 509 508
+             510:    500(ptr) AccessChain 499(patch.UV) 205
+             511:   44(fvec2) Load 510
+             512:     46(ptr) AccessChain 482(patch) 205 377
+                              Store 512 511
+             513:    486(ptr) AccessChain 485(patch.Pos) 377
+             514:   17(fvec4) Load 513
+             515:     20(ptr) AccessChain 482(patch) 377 204
+                              Store 515 514
+             516:    493(ptr) AccessChain 492(patch.Normal) 377
+             517:   66(fvec3) Load 516
+             518:    471(ptr) AccessChain 482(patch) 377 205
+                              Store 518 517
+             519:    500(ptr) AccessChain 499(patch.UV) 377
+             520:   44(fvec2) Load 519
+             521:     46(ptr) AccessChain 482(patch) 377 377
+                              Store 521 520
+             522:    486(ptr) AccessChain 485(patch.Pos) 347
+             523:   17(fvec4) Load 522
+             524:     20(ptr) AccessChain 482(patch) 347 204
+                              Store 524 523
+             525:    493(ptr) AccessChain 492(patch.Normal) 347
+             526:   66(fvec3) Load 525
+             527:    471(ptr) AccessChain 482(patch) 347 205
+                              Store 527 526
+             528:    500(ptr) AccessChain 499(patch.UV) 347
+             529:   44(fvec2) Load 528
+             530:     46(ptr) AccessChain 482(patch) 347 377
+                              Store 530 529
+             534:     10(int) Load 533(InvocationID)
+                              Store 531(InvocationID) 534
+             537:          82 Load 482(patch)
+                              Store 536(param) 537
+             539:     10(int) Load 531(InvocationID)
+                              Store 538(param) 539
+             540:112(HSOutput) FunctionCall 125(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;) 536(param) 538(param)
+                              Store 535(flattenTemp) 540
+             543:     10(int) Load 533(InvocationID)
+             544:     20(ptr) AccessChain 535(flattenTemp) 204
+             545:   17(fvec4) Load 544
+             547:    546(ptr) AccessChain 542(@entryPointOutput.Pos) 543
+                              Store 547 545
+             550:     10(int) Load 533(InvocationID)
+             551:    471(ptr) AccessChain 535(flattenTemp) 205
+             552:   66(fvec3) Load 551
+             554:    553(ptr) AccessChain 549(@entryPointOutput.Normal) 550
+                              Store 554 552
+             557:     10(int) Load 533(InvocationID)
+             558:     46(ptr) AccessChain 535(flattenTemp) 377
+             559:   44(fvec2) Load 558
+             561:    560(ptr) AccessChain 556(@entryPointOutput.UV) 557
+                              Store 561 559
+                              ControlBarrier 42 18 15
+             562:     10(int) Load 533(InvocationID)
+             563:    47(bool) IEqual 562 204
+                              SelectionMerge 565 None
+                              BranchConditional 563 564 565
+             564:               Label
+             568:          82   Load 482(patch)
+                                Store 567(param) 568
+             569:89(ConstantsHSOutput)   FunctionCall 102(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];) 567(param)
+                                Store 566(@patchConstantResult) 569
+             572:    147(ptr)   AccessChain 566(@patchConstantResult) 204 204
+             573:    7(float)   Load 572
+             575:    574(ptr)   AccessChain 571(@patchConstantOutput.TessLevelOuter) 204
+                                Store 575 573
+             576:    147(ptr)   AccessChain 566(@patchConstantResult) 204 205
+             577:    7(float)   Load 576
+             578:    574(ptr)   AccessChain 571(@patchConstantOutput.TessLevelOuter) 205
+                                Store 578 577
+             579:    147(ptr)   AccessChain 566(@patchConstantResult) 204 377
+             580:    7(float)   Load 579
+             581:    574(ptr)   AccessChain 571(@patchConstantOutput.TessLevelOuter) 377
+                                Store 581 580
+             582:    147(ptr)   AccessChain 566(@patchConstantResult) 204 347
+             583:    7(float)   Load 582
+             584:    574(ptr)   AccessChain 571(@patchConstantOutput.TessLevelOuter) 347
+                                Store 584 583
+             587:    147(ptr)   AccessChain 566(@patchConstantResult) 205 204
+             588:    7(float)   Load 587
+             589:    574(ptr)   AccessChain 586(@patchConstantOutput.TessLevelInner) 204
+                                Store 589 588
+             590:    147(ptr)   AccessChain 566(@patchConstantResult) 205 205
+             591:    7(float)   Load 590
+             592:    574(ptr)   AccessChain 586(@patchConstantOutput.TessLevelInner) 205
+                                Store 592 591
+                                Branch 565
+             565:             Label
+                              Return
+                              FunctionEnd
+25(screenSpaceTessFactor(vf4;vf4;):    7(float) Function None 21
+          23(p0):     20(ptr) FunctionParameter
+          24(p1):     20(ptr) FunctionParameter
+              33:             Label
+   137(midPoint):     20(ptr) Variable Function
+     148(radius):    147(ptr) Variable Function
+         158(v0):     20(ptr) Variable Function
+      210(clip0):     20(ptr) Variable Function
+      227(clip1):     20(ptr) Variable Function
+              34:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 27
+              35:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 28 15 15 15 15
+              38:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 36 23(p0) 39
+              43:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 40 24(p1) 39
+             136:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 27 25(screenSpaceTessFactor(vf4;vf4;)
+             141:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 138 137(midPoint) 39
+             143:   17(fvec4) Load 23(p0)
+             144:   17(fvec4) Load 24(p1)
+             145:   17(fvec4) FAdd 143 144
+             146:   17(fvec4) VectorTimesScalar 145 142
+                              Store 137(midPoint) 146
+             152:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 149 148(radius) 39
+             153:   17(fvec4) Load 23(p0)
+             154:   17(fvec4) Load 24(p1)
+             155:    7(float) ExtInst 2(GLSL.std.450) 67(Distance) 153 154
+             157:    7(float) FDiv 155 156
+                              Store 148(radius) 157
+             162:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 159 158(v0) 39
+             163:   17(fvec4) Load 137(midPoint)
+             207:    206(ptr) AccessChain 198 204 205
+             208:         164 Load 207
+             209:   17(fvec4) VectorTimesMatrix 163 208
+                              Store 158(v0) 209
+             214:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 211 210(clip0) 39
+             215:   17(fvec4) Load 158(v0)
+             216:    7(float) Load 148(radius)
+             219:    7(float) CompositeExtract 218 0
+             220:    7(float) CompositeExtract 218 1
+             221:    7(float) CompositeExtract 218 2
+             222:   17(fvec4) CompositeConstruct 216 219 220 221
+             223:   17(fvec4) FSub 215 222
+             224:    206(ptr) AccessChain 198 204 204
+             225:         164 Load 224
+             226:   17(fvec4) VectorTimesMatrix 223 225
+                              Store 210(clip0) 226
+             231:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 228 227(clip1) 39
+             232:   17(fvec4) Load 158(v0)
+             233:    7(float) Load 148(radius)
+             234:    7(float) CompositeExtract 218 0
+             235:    7(float) CompositeExtract 218 1
+             236:    7(float) CompositeExtract 218 2
+             237:   17(fvec4) CompositeConstruct 233 234 235 236
+             238:   17(fvec4) FAdd 232 237
+             239:    206(ptr) AccessChain 198 204 204
+             240:         164 Load 239
+             241:   17(fvec4) VectorTimesMatrix 238 240
+                              Store 227(clip1) 241
+             242:    147(ptr) AccessChain 210(clip0) 16
+             243:    7(float) Load 242
+             244:   17(fvec4) Load 210(clip0)
+             245:   17(fvec4) CompositeConstruct 243 243 243 243
+             246:   17(fvec4) FDiv 244 245
+                              Store 210(clip0) 246
+             247:    147(ptr) AccessChain 227(clip1) 16
+             248:    7(float) Load 247
+             249:   17(fvec4) Load 227(clip1)
+             250:   17(fvec4) CompositeConstruct 248 248 248 248
+             251:   17(fvec4) FDiv 249 250
+                              Store 227(clip1) 251
+             254:    253(ptr) AccessChain 198 204 252
+             255:   44(fvec2) Load 254
+             256:   17(fvec4) Load 210(clip0)
+             257:   44(fvec2) VectorShuffle 256 256 0 1
+             258:   44(fvec2) FMul 257 255
+             259:    147(ptr) AccessChain 210(clip0) 15
+             260:    7(float) CompositeExtract 258 0
+                              Store 259 260
+             261:    147(ptr) AccessChain 210(clip0) 31
+             262:    7(float) CompositeExtract 258 1
+                              Store 261 262
+             263:    253(ptr) AccessChain 198 204 252
+             264:   44(fvec2) Load 263
+             265:   17(fvec4) Load 227(clip1)
+             266:   44(fvec2) VectorShuffle 265 265 0 1
+             267:   44(fvec2) FMul 266 264
+             268:    147(ptr) AccessChain 227(clip1) 15
+             269:    7(float) CompositeExtract 267 0
+                              Store 268 269
+             270:    147(ptr) AccessChain 227(clip1) 31
+             271:    7(float) CompositeExtract 267 1
+                              Store 270 271
+             272:   17(fvec4) Load 210(clip0)
+             273:   17(fvec4) Load 227(clip1)
+             274:    7(float) ExtInst 2(GLSL.std.450) 67(Distance) 272 273
+             277:    276(ptr) AccessChain 198 204 275
+             278:    7(float) Load 277
+             279:    7(float) FDiv 274 278
+             281:    276(ptr) AccessChain 198 204 280
+             282:    7(float) Load 281
+             283:    7(float) FMul 279 282
+             286:    7(float) ExtInst 2(GLSL.std.450) 43(FClamp) 283 284 285
+                              ReturnValue 286
+                              FunctionEnd
+54(frustumCheck(vf4;vf2;):    47(bool) Function None 50
+         52(Pos):     20(ptr) FunctionParameter
+        53(inUV):     46(ptr) FunctionParameter
+              57:             Label
+        290(pos):     20(ptr) Variable Function
+          333(i):    332(ptr) Variable Function
+              58:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 56
+              59:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 28 15 15 15 15
+              62:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 60 52(Pos) 39
+              65:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 63 53(inUV) 39
+             289:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 56 54(frustumCheck(vf4;vf2;)
+             294:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 291 290(pos) 39
+             295:   17(fvec4) Load 52(Pos)
+                              Store 290(pos) 295
+             306:         296 Load 303(textureHeight)
+             315:         307 Load 312(samplerHeight)
+             320:         316 SampledImage 306 315
+             321:   44(fvec2) Load 53(inUV)
+             322:   17(fvec4) ImageSampleExplicitLod 320 321 Lod 217
+             323:    7(float) CompositeExtract 322 0
+             325:    276(ptr) AccessChain 198 204 324
+             326:    7(float) Load 325
+             327:    7(float) FMul 323 326
+             328:    147(ptr) AccessChain 290(pos) 31
+             329:    7(float) Load 328
+             330:    7(float) FSub 329 327
+             331:    147(ptr) AccessChain 290(pos) 31
+                              Store 331 330
+             337:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 334 333(i) 39
+                              Store 333(i) 204
+                              Branch 338
+             338:             Label
+                              LoopMerge 340 341 None
+                              Branch 342
+             342:             Label
+             343:    201(int) Load 333(i)
+             345:    47(bool) SLessThan 343 252
+                              BranchConditional 345 339 340
+             339:               Label
+             346:   17(fvec4)   Load 290(pos)
+             348:    201(int)   Load 333(i)
+             350:    349(ptr)   AccessChain 198 204 347 348
+             351:   17(fvec4)   Load 350
+             352:    7(float)   Dot 346 351
+             354:    7(float)   FAdd 352 353
+             356:    47(bool)   FOrdLessThan 354 217
+                                SelectionMerge 358 None
+                                BranchConditional 356 357 358
+             357:                 Label
+                                  ReturnValue 360
+             358:               Label
+                                Branch 341
+             341:               Label
+             362:    201(int)   Load 333(i)
+             363:    201(int)   IAdd 362 205
+                                Store 333(i) 363
+                                Branch 338
+             340:             Label
+                              ReturnValue 166
+                              FunctionEnd
+102(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];):89(ConstantsHSOutput) Function None 99
+      101(patch):     84(ptr) FunctionParameter
+             105:             Label
+     369(output):    368(ptr) Variable Function
+      378(param):     20(ptr) Variable Function
+      381(param):     46(ptr) Variable Function
+      403(param):     20(ptr) Variable Function
+      406(param):     20(ptr) Variable Function
+      411(param):     20(ptr) Variable Function
+      414(param):     20(ptr) Variable Function
+      419(param):     20(ptr) Variable Function
+      422(param):     20(ptr) Variable Function
+      427(param):     20(ptr) Variable Function
+      430(param):     20(ptr) Variable Function
+             106:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 104
+             107:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 28 15 15 15 15
+             110:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 108 101(patch) 39
+             367:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 104 102(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];)
+             373:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 370 369(output) 39
+                              Store 369(output) 376
+             379:     20(ptr) AccessChain 101(patch) 204 204
+             380:   17(fvec4) Load 379
+                              Store 378(param) 380
+             382:     46(ptr) AccessChain 101(patch) 204 377
+             383:   44(fvec2) Load 382
+                              Store 381(param) 383
+             384:    47(bool) FunctionCall 54(frustumCheck(vf4;vf2;) 378(param) 381(param)
+             387:    47(bool) LogicalNot 384
+                              SelectionMerge 389 None
+                              BranchConditional 387 388 396
+             388:               Label
+             390:    147(ptr)   AccessChain 369(output) 205 204
+                                Store 390 217
+             391:    147(ptr)   AccessChain 369(output) 205 205
+                                Store 391 217
+             392:    147(ptr)   AccessChain 369(output) 204 204
+                                Store 392 217
+             393:    147(ptr)   AccessChain 369(output) 204 205
+                                Store 393 217
+             394:    147(ptr)   AccessChain 369(output) 204 377
+                                Store 394 217
+             395:    147(ptr)   AccessChain 369(output) 204 347
+                                Store 395 217
+                                Branch 389
+             396:               Label
+             397:    276(ptr)   AccessChain 198 204 280
+             398:    7(float)   Load 397
+             400:    47(bool)   FOrdGreaterThan 398 217
+                                SelectionMerge 402 None
+                                BranchConditional 400 401 447
+             401:                 Label
+             404:     20(ptr)     AccessChain 101(patch) 347 204
+             405:   17(fvec4)     Load 404
+                                  Store 403(param) 405
+             407:     20(ptr)     AccessChain 101(patch) 204 204
+             408:   17(fvec4)     Load 407
+                                  Store 406(param) 408
+             409:    7(float)     FunctionCall 25(screenSpaceTessFactor(vf4;vf4;) 403(param) 406(param)
+             410:    147(ptr)     AccessChain 369(output) 204 204
+                                  Store 410 409
+             412:     20(ptr)     AccessChain 101(patch) 204 204
+             413:   17(fvec4)     Load 412
+                                  Store 411(param) 413
+             415:     20(ptr)     AccessChain 101(patch) 205 204
+             416:   17(fvec4)     Load 415
+                                  Store 414(param) 416
+             417:    7(float)     FunctionCall 25(screenSpaceTessFactor(vf4;vf4;) 411(param) 414(param)
+             418:    147(ptr)     AccessChain 369(output) 204 205
+                                  Store 418 417
+             420:     20(ptr)     AccessChain 101(patch) 205 204
+             421:   17(fvec4)     Load 420
+                                  Store 419(param) 421
+             423:     20(ptr)     AccessChain 101(patch) 377 204
+             424:   17(fvec4)     Load 423
+                                  Store 422(param) 424
+             425:    7(float)     FunctionCall 25(screenSpaceTessFactor(vf4;vf4;) 419(param) 422(param)
+             426:    147(ptr)     AccessChain 369(output) 204 377
+                                  Store 426 425
+             428:     20(ptr)     AccessChain 101(patch) 377 204
+             429:   17(fvec4)     Load 428
+                                  Store 427(param) 429
+             431:     20(ptr)     AccessChain 101(patch) 347 204
+             432:   17(fvec4)     Load 431
+                                  Store 430(param) 432
+             433:    7(float)     FunctionCall 25(screenSpaceTessFactor(vf4;vf4;) 427(param) 430(param)
+             434:    147(ptr)     AccessChain 369(output) 204 347
+                                  Store 434 433
+             435:    147(ptr)     AccessChain 369(output) 204 204
+             436:    7(float)     Load 435
+             437:    147(ptr)     AccessChain 369(output) 204 347
+             438:    7(float)     Load 437
+             439:    7(float)     ExtInst 2(GLSL.std.450) 46(FMix) 436 438 142
+             440:    147(ptr)     AccessChain 369(output) 205 204
+                                  Store 440 439
+             441:    147(ptr)     AccessChain 369(output) 204 377
+             442:    7(float)     Load 441
+             443:    147(ptr)     AccessChain 369(output) 204 205
+             444:    7(float)     Load 443
+             445:    7(float)     ExtInst 2(GLSL.std.450) 46(FMix) 442 444 142
+             446:    147(ptr)     AccessChain 369(output) 205 205
+                                  Store 446 445
+                                  Branch 402
+             447:                 Label
+             448:    147(ptr)     AccessChain 369(output) 205 204
+                                  Store 448 284
+             449:    147(ptr)     AccessChain 369(output) 205 205
+                                  Store 449 284
+             450:    147(ptr)     AccessChain 369(output) 204 204
+                                  Store 450 284
+             451:    147(ptr)     AccessChain 369(output) 204 205
+                                  Store 451 284
+             452:    147(ptr)     AccessChain 369(output) 204 377
+                                  Store 452 284
+             453:    147(ptr)     AccessChain 369(output) 204 347
+                                  Store 453 284
+                                  Branch 402
+             402:               Label
+                                Branch 389
+             389:             Label
+             454:89(ConstantsHSOutput) Load 369(output)
+                              ReturnValue 454
+                              FunctionEnd
+125(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;):112(HSOutput) Function None 121
+      123(patch):     84(ptr) FunctionParameter
+124(InvocationID):    111(ptr) FunctionParameter
+             128:             Label
+     459(output):    458(ptr) Variable Function
+             129:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 127
+             130:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 28 15 15 15 15
+             132:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 131 123(patch) 39
+             135:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 133 124(InvocationID) 39
+             457:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 127 125(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;)
+             462:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 460 459(output) 39
+                              Store 459(output) 465
+             466:     10(int) Load 124(InvocationID)
+             467:     20(ptr) AccessChain 123(patch) 466 204
+             468:   17(fvec4) Load 467
+             469:     20(ptr) AccessChain 459(output) 204
+                              Store 469 468
+             470:     10(int) Load 124(InvocationID)
+             472:    471(ptr) AccessChain 123(patch) 470 205
+             473:   66(fvec3) Load 472
+             474:    471(ptr) AccessChain 459(output) 205
+                              Store 474 473
+             475:     10(int) Load 124(InvocationID)
+             476:     46(ptr) AccessChain 123(patch) 475 377
+             477:   44(fvec2) Load 476
+             478:     46(ptr) AccessChain 459(output) 377
+                              Store 478 477
+             479:112(HSOutput) Load 459(output)
+                              ReturnValue 479
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.tese.out b/Test/baseResults/spv.debuginfo.hlsl.tese.out
new file mode 100644
index 0000000..939f64a
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.hlsl.tese.out
@@ -0,0 +1,589 @@
+spv.debuginfo.hlsl.tese
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 434
+
+                              Capability Tessellation
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationEvaluation 5  "main" 325 340 349 358 365 371 411 415 419 422 425 428 431
+                              ExecutionMode 5 Quads
+               9:             String  "float"
+              12:             String  "uint"
+              25:             String  "TessLevelOuter"
+              27:             String  ""
+              31:             String  "TessLevelInner"
+              34:             String  "ConstantsHSOutput"
+              48:             String  "Pos"
+              51:             String  "Normal"
+              55:             String  "UV"
+              59:             String  "HSOutput"
+              67:             String  "WorldPos"
+              77:             String  "DSOutput"
+              84:             String  "@main"
+              90:             String  "input"
+              94:             String  "TessCoord"
+              97:             String  "patch"
+             103:             String  "output"
+             113:             String  "uv1"
+             117:             String  "int"
+             131:             String  "uv2"
+             151:             String  "n1"
+             162:             String  "n2"
+             181:             String  "pos1"
+             192:             String  "pos2"
+             203:             String  "pos"
+             214:             String  "type.2d.image"
+             216:             String  "@type.2d.image"
+             221:             String  "displacementMapTexture"
+             226:             String  "type.sampler"
+             227:             String  "@type.sampler"
+             231:             String  "displacementMapSampler"
+             235:             String  "type.sampled.image"
+             236:             String  "@type.sampled.image"
+             250:             String  "modelview"
+             255:             String  "lightPos"
+             259:             String  "frustumPlanes"
+             262:             String  "tessellatedEdgeSize"
+             266:             String  "viewportDim"
+             270:             String  "UBO"
+             273:             String  "ubo"
+                              Name 5  "main"
+                              Name 23  "ConstantsHSOutput"
+                              MemberName 23(ConstantsHSOutput) 0  "TessLevelOuter"
+                              MemberName 23(ConstantsHSOutput) 1  "TessLevelInner"
+                              Name 46  "HSOutput"
+                              MemberName 46(HSOutput) 0  "Pos"
+                              MemberName 46(HSOutput) 1  "Normal"
+                              MemberName 46(HSOutput) 2  "UV"
+                              Name 62  "DSOutput"
+                              MemberName 62(DSOutput) 0  "Pos"
+                              MemberName 62(DSOutput) 1  "Normal"
+                              MemberName 62(DSOutput) 2  "UV"
+                              MemberName 62(DSOutput) 3  "ViewVec"
+                              MemberName 62(DSOutput) 4  "LightVec"
+                              MemberName 62(DSOutput) 5  "EyePos"
+                              MemberName 62(DSOutput) 6  "WorldPos"
+                              Name 83  "@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];"
+                              Name 80  "input"
+                              Name 81  "TessCoord"
+                              Name 82  "patch"
+                              Name 101  "output"
+                              Name 111  "uv1"
+                              Name 129  "uv2"
+                              Name 149  "n1"
+                              Name 160  "n2"
+                              Name 179  "pos1"
+                              Name 190  "pos2"
+                              Name 201  "pos"
+                              Name 219  "displacementMapTexture"
+                              Name 229  "displacementMapSampler"
+                              Name 248  "UBO"
+                              MemberName 248(UBO) 0  "projection"
+                              MemberName 248(UBO) 1  "modelview"
+                              MemberName 248(UBO) 2  "lightPos"
+                              MemberName 248(UBO) 3  "frustumPlanes"
+                              MemberName 248(UBO) 4  "displacementFactor"
+                              MemberName 248(UBO) 5  "tessellationFactor"
+                              MemberName 248(UBO) 6  "viewportDim"
+                              MemberName 248(UBO) 7  "tessellatedEdgeSize"
+                              Name 271  "ubo"
+                              MemberName 271(ubo) 0  "ubo"
+                              Name 276  ""
+                              Name 323  "input"
+                              Name 325  "input.TessLevelOuter"
+                              Name 340  "input.TessLevelInner"
+                              Name 347  "TessCoord"
+                              Name 349  "TessCoord"
+                              Name 355  "patch"
+                              Name 358  "patch.Pos"
+                              Name 365  "patch.Normal"
+                              Name 371  "patch.UV"
+                              Name 403  "flattenTemp"
+                              Name 405  "param"
+                              Name 407  "param"
+                              Name 411  "@entryPointOutput.Pos"
+                              Name 415  "@entryPointOutput.Normal"
+                              Name 419  "@entryPointOutput.UV"
+                              Name 422  "@entryPointOutput.ViewVec"
+                              Name 425  "@entryPointOutput.LightVec"
+                              Name 428  "@entryPointOutput.EyePos"
+                              Name 431  "@entryPointOutput.WorldPos"
+                              Decorate 219(displacementMapTexture) DescriptorSet 0
+                              Decorate 219(displacementMapTexture) Binding 1
+                              Decorate 229(displacementMapSampler) DescriptorSet 0
+                              Decorate 229(displacementMapSampler) Binding 1
+                              Decorate 246 ArrayStride 16
+                              MemberDecorate 248(UBO) 0 RowMajor
+                              MemberDecorate 248(UBO) 0 Offset 0
+                              MemberDecorate 248(UBO) 0 MatrixStride 16
+                              MemberDecorate 248(UBO) 1 RowMajor
+                              MemberDecorate 248(UBO) 1 Offset 64
+                              MemberDecorate 248(UBO) 1 MatrixStride 16
+                              MemberDecorate 248(UBO) 2 Offset 128
+                              MemberDecorate 248(UBO) 3 Offset 144
+                              MemberDecorate 248(UBO) 4 Offset 240
+                              MemberDecorate 248(UBO) 5 Offset 244
+                              MemberDecorate 248(UBO) 6 Offset 248
+                              MemberDecorate 248(UBO) 7 Offset 256
+                              MemberDecorate 271(ubo) 0 Offset 0
+                              Decorate 271(ubo) Block
+                              Decorate 276 DescriptorSet 0
+                              Decorate 276 Binding 0
+                              Decorate 325(input.TessLevelOuter) Patch
+                              Decorate 325(input.TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 340(input.TessLevelInner) Patch
+                              Decorate 340(input.TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 349(TessCoord) Patch
+                              Decorate 349(TessCoord) BuiltIn TessCoord
+                              Decorate 358(patch.Pos) BuiltIn Position
+                              Decorate 365(patch.Normal) Location 0
+                              Decorate 371(patch.UV) Location 1
+                              Decorate 411(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 415(@entryPointOutput.Normal) Location 0
+                              Decorate 419(@entryPointOutput.UV) Location 1
+                              Decorate 422(@entryPointOutput.ViewVec) Location 2
+                              Decorate 425(@entryPointOutput.LightVec) Location 3
+                              Decorate 428(@entryPointOutput.EyePos) Location 4
+                              Decorate 431(@entryPointOutput.WorldPos) Location 5
+               3:             TypeVoid
+               4:             TypeFunction 3
+               7:             TypeFloat 32
+              10:             TypeInt 32 0
+              13:     10(int) Constant 32
+              14:     10(int) Constant 6
+              15:     10(int) Constant 0
+              11:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 12 13 14 15
+              16:     10(int) Constant 3
+               8:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 9 13 16 15
+              17:     10(int) Constant 4
+              18:             TypeArray 7(float) 17
+              19:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 8 17
+              20:     10(int) Constant 2
+              21:             TypeArray 7(float) 20
+              22:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 8 20
+23(ConstantsHSOutput):             TypeStruct 18 21
+              26:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 27
+              28:     10(int) Constant 51
+              29:     10(int) Constant 25
+              24:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 25 19 26 28 29 15 15 16
+              32:     10(int) Constant 52
+              30:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 31 22 26 32 29 15 15 16
+              35:     10(int) Constant 1
+              37:     10(int) Constant 5
+              36:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 35 17 26 37
+              33:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 34 35 26 15 15 36 34 15 16 24 30
+              38:             TypePointer Function 23(ConstantsHSOutput)
+              39:             TypeVector 7(float) 2
+              40:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 20
+              41:             TypePointer Function 39(fvec2)
+              42:             TypeVector 7(float) 4
+              43:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 17
+              44:             TypeVector 7(float) 3
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 16
+    46(HSOutput):             TypeStruct 42(fvec4) 44(fvec3) 39(fvec2)
+              49:     10(int) Constant 44
+              47:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 48 43 26 49 13 15 15 16
+              52:     10(int) Constant 45
+              53:     10(int) Constant 35
+              50:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 51 45 26 52 53 15 15 16
+              56:     10(int) Constant 46
+              57:     10(int) Constant 31
+              54:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 55 40 26 56 57 15 15 16
+              58:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 59 35 26 15 15 36 59 15 16 47 50 54
+              60:             TypeArray 46(HSOutput) 17
+              61:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 58 17
+    62(DSOutput):             TypeStruct 42(fvec4) 44(fvec3) 39(fvec2) 44(fvec3) 44(fvec3) 44(fvec3) 44(fvec3)
+              64:     10(int) Constant 57
+              65:     10(int) Constant 13
+              63:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 48 43 26 64 65 15 15 16
+              68:     10(int) Constant 63
+              69:     10(int) Constant 37
+              66:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 67 45 26 68 69 15 15 16
+              71:     10(int) Constant 59
+              70:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 55 40 26 71 57 15 15 16
+              72:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 67 45 26 68 69 15 15 16
+              73:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 67 45 26 68 69 15 15 16
+              74:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 67 45 26 68 69 15 15 16
+              75:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 67 45 26 68 69 15 15 16
+              76:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 77 35 26 15 15 36 77 15 16 63 66 70 72 73 74 75
+              78:             TypeFunction 62(DSOutput) 38(ptr) 41(ptr) 60
+              79:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 76 33 40 58
+              85:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 84 79 26 15 15 36 84 16 15
+              89:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 90 33 26 15 15 85 17 35
+              92:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              93:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 94 40 26 15 15 85 17 20
+              96:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 97 58 26 15 15 85 17 16
+             100:             TypePointer Function 62(DSOutput)
+             104:     10(int) Constant 70
+             102:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 103 76 26 104 15 85 17
+             106:    7(float) Constant 0
+             107:   42(fvec4) ConstantComposite 106 106 106 106
+             108:   44(fvec3) ConstantComposite 106 106 106
+             109:   39(fvec2) ConstantComposite 106 106
+             110:62(DSOutput) ConstantComposite 107 108 109 108 108 108 108
+             114:     10(int) Constant 71
+             112:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 113 40 26 114 15 85 17
+             116:             TypeInt 32 1
+             118:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 117 13 17 15
+             119:    116(int) Constant 0
+             120:    116(int) Constant 2
+             122:    116(int) Constant 1
+             124:             TypePointer Function 7(float)
+             132:     10(int) Constant 72
+             130:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 131 40 26 132 15 85 17
+             134:    116(int) Constant 3
+             148:             TypePointer Function 44(fvec3)
+             152:     10(int) Constant 75
+             150:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 151 45 26 152 15 85 17
+             163:     10(int) Constant 76
+             161:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 162 45 26 163 15 85 17
+             178:             TypePointer Function 42(fvec4)
+             182:     10(int) Constant 80
+             180:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 181 43 26 182 15 85 17
+             193:     10(int) Constant 81
+             191:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 192 43 26 193 15 85 17
+             204:     10(int) Constant 82
+             202:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 203 43 26 204 15 85 17
+             212:             TypeImage 7(float) 2D sampled format:Unknown
+             215:     10(int) Constant 84
+             217:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(Unknown)
+             213:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 214 15 26 215 15 36 216 217 16
+             218:             TypePointer UniformConstant 212
+219(displacementMapTexture):    218(ptr) Variable UniformConstant
+             222:     10(int) Constant 8
+             220:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 221 213 26 215 15 36 221 219(displacementMapTexture) 222
+             224:             TypeSampler
+             225:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 226 35 26 215 15 36 227 217 16
+             228:             TypePointer UniformConstant 224
+229(displacementMapSampler):    228(ptr) Variable UniformConstant
+             230:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 231 225 26 215 15 36 231 229(displacementMapSampler) 222
+             233:             TypeSampledImage 212
+             234:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 235 15 26 215 15 36 236 217 16
+             242:             TypeMatrix 42(fvec4) 4
+             244:             TypeBool
+             245:   244(bool) ConstantTrue
+             243:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 43 17 245
+             246:             TypeArray 42(fvec4) 14
+             247:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(SAbs) 43 14
+        248(UBO):             TypeStruct 242 242 42(fvec4) 246 7(float) 7(float) 39(fvec2) 7(float)
+             251:     10(int) Constant 29
+             252:     10(int) Constant 20
+             249:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 250 243 26 251 252 15 15 16
+             253:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 250 243 26 251 252 15 15 16
+             256:     10(int) Constant 30
+             257:     10(int) Constant 17
+             254:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 255 43 26 256 257 15 15 16
+             260:     10(int) Constant 22
+             258:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 259 247 26 57 260 15 15 16
+             263:     10(int) Constant 27
+             261:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 262 8 26 53 263 15 15 16
+             264:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 262 8 26 53 263 15 15 16
+             267:     10(int) Constant 34
+             265:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 266 40 26 267 252 15 15 16
+             268:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 262 8 26 53 263 15 15 16
+             269:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 270 35 26 215 15 36 270 15 16 249 253 254 258 261 264 265 268
+        271(ubo):             TypeStruct 248(UBO)
+             272:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 273 269 26 69 69 15 15 16
+             274:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 273 35 26 215 15 36 273 15 16 272
+             275:             TypePointer Uniform 271(ubo)
+             276:    275(ptr) Variable Uniform
+             277:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 27 274 26 215 15 36 27 276 222
+             278:    116(int) Constant 4
+             279:             TypePointer Uniform 7(float)
+             288:             TypePointer Uniform 242
+             300:             TypePointer Uniform 42(fvec4)
+             309:    116(int) Constant 6
+             313:    116(int) Constant 5
+             324:             TypePointer Input 18
+325(input.TessLevelOuter):    324(ptr) Variable Input
+             326:             TypePointer Input 7(float)
+             339:             TypePointer Input 21
+340(input.TessLevelInner):    339(ptr) Variable Input
+             348:             TypePointer Input 44(fvec3)
+  349(TessCoord):    348(ptr) Variable Input
+             354:             TypePointer Function 60
+             356:             TypeArray 42(fvec4) 17
+             357:             TypePointer Input 356
+  358(patch.Pos):    357(ptr) Variable Input
+             359:             TypePointer Input 42(fvec4)
+             363:             TypeArray 44(fvec3) 17
+             364:             TypePointer Input 363
+365(patch.Normal):    364(ptr) Variable Input
+             369:             TypeArray 39(fvec2) 17
+             370:             TypePointer Input 369
+   371(patch.UV):    370(ptr) Variable Input
+             372:             TypePointer Input 39(fvec2)
+             410:             TypePointer Output 42(fvec4)
+411(@entryPointOutput.Pos):    410(ptr) Variable Output
+             414:             TypePointer Output 44(fvec3)
+415(@entryPointOutput.Normal):    414(ptr) Variable Output
+             418:             TypePointer Output 39(fvec2)
+419(@entryPointOutput.UV):    418(ptr) Variable Output
+422(@entryPointOutput.ViewVec):    414(ptr) Variable Output
+425(@entryPointOutput.LightVec):    414(ptr) Variable Output
+428(@entryPointOutput.EyePos):    414(ptr) Variable Output
+431(@entryPointOutput.WorldPos):    414(ptr) Variable Output
+         5(main):           3 Function None 4
+               6:             Label
+      323(input):     38(ptr) Variable Function
+  347(TessCoord):     41(ptr) Variable Function
+      355(patch):    354(ptr) Variable Function
+403(flattenTemp):    100(ptr) Variable Function
+      405(param):     38(ptr) Variable Function
+      407(param):     41(ptr) Variable Function
+             327:    326(ptr) AccessChain 325(input.TessLevelOuter) 119
+             328:    7(float) Load 327
+             329:    124(ptr) AccessChain 323(input) 119 119
+                              Store 329 328
+             330:    326(ptr) AccessChain 325(input.TessLevelOuter) 122
+             331:    7(float) Load 330
+             332:    124(ptr) AccessChain 323(input) 119 122
+                              Store 332 331
+             333:    326(ptr) AccessChain 325(input.TessLevelOuter) 120
+             334:    7(float) Load 333
+             335:    124(ptr) AccessChain 323(input) 119 120
+                              Store 335 334
+             336:    326(ptr) AccessChain 325(input.TessLevelOuter) 134
+             337:    7(float) Load 336
+             338:    124(ptr) AccessChain 323(input) 119 134
+                              Store 338 337
+             341:    326(ptr) AccessChain 340(input.TessLevelInner) 119
+             342:    7(float) Load 341
+             343:    124(ptr) AccessChain 323(input) 122 119
+                              Store 343 342
+             344:    326(ptr) AccessChain 340(input.TessLevelInner) 122
+             345:    7(float) Load 344
+             346:    124(ptr) AccessChain 323(input) 122 122
+                              Store 346 345
+             350:   44(fvec3) Load 349(TessCoord)
+             351:    7(float) CompositeExtract 350 0
+             352:    7(float) CompositeExtract 350 1
+             353:   39(fvec2) CompositeConstruct 351 352
+                              Store 347(TessCoord) 353
+             360:    359(ptr) AccessChain 358(patch.Pos) 119
+             361:   42(fvec4) Load 360
+             362:    178(ptr) AccessChain 355(patch) 119 119
+                              Store 362 361
+             366:    348(ptr) AccessChain 365(patch.Normal) 119
+             367:   44(fvec3) Load 366
+             368:    148(ptr) AccessChain 355(patch) 119 122
+                              Store 368 367
+             373:    372(ptr) AccessChain 371(patch.UV) 119
+             374:   39(fvec2) Load 373
+             375:     41(ptr) AccessChain 355(patch) 119 120
+                              Store 375 374
+             376:    359(ptr) AccessChain 358(patch.Pos) 122
+             377:   42(fvec4) Load 376
+             378:    178(ptr) AccessChain 355(patch) 122 119
+                              Store 378 377
+             379:    348(ptr) AccessChain 365(patch.Normal) 122
+             380:   44(fvec3) Load 379
+             381:    148(ptr) AccessChain 355(patch) 122 122
+                              Store 381 380
+             382:    372(ptr) AccessChain 371(patch.UV) 122
+             383:   39(fvec2) Load 382
+             384:     41(ptr) AccessChain 355(patch) 122 120
+                              Store 384 383
+             385:    359(ptr) AccessChain 358(patch.Pos) 120
+             386:   42(fvec4) Load 385
+             387:    178(ptr) AccessChain 355(patch) 120 119
+                              Store 387 386
+             388:    348(ptr) AccessChain 365(patch.Normal) 120
+             389:   44(fvec3) Load 388
+             390:    148(ptr) AccessChain 355(patch) 120 122
+                              Store 390 389
+             391:    372(ptr) AccessChain 371(patch.UV) 120
+             392:   39(fvec2) Load 391
+             393:     41(ptr) AccessChain 355(patch) 120 120
+                              Store 393 392
+             394:    359(ptr) AccessChain 358(patch.Pos) 134
+             395:   42(fvec4) Load 394
+             396:    178(ptr) AccessChain 355(patch) 134 119
+                              Store 396 395
+             397:    348(ptr) AccessChain 365(patch.Normal) 134
+             398:   44(fvec3) Load 397
+             399:    148(ptr) AccessChain 355(patch) 134 122
+                              Store 399 398
+             400:    372(ptr) AccessChain 371(patch.UV) 134
+             401:   39(fvec2) Load 400
+             402:     41(ptr) AccessChain 355(patch) 134 120
+                              Store 402 401
+             404:          60 Load 355(patch)
+             406:23(ConstantsHSOutput) Load 323(input)
+                              Store 405(param) 406
+             408:   39(fvec2) Load 347(TessCoord)
+                              Store 407(param) 408
+             409:62(DSOutput) FunctionCall 83(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];) 405(param) 407(param) 404
+                              Store 403(flattenTemp) 409
+             412:    178(ptr) AccessChain 403(flattenTemp) 119
+             413:   42(fvec4) Load 412
+                              Store 411(@entryPointOutput.Pos) 413
+             416:    148(ptr) AccessChain 403(flattenTemp) 122
+             417:   44(fvec3) Load 416
+                              Store 415(@entryPointOutput.Normal) 417
+             420:     41(ptr) AccessChain 403(flattenTemp) 120
+             421:   39(fvec2) Load 420
+                              Store 419(@entryPointOutput.UV) 421
+             423:    148(ptr) AccessChain 403(flattenTemp) 134
+             424:   44(fvec3) Load 423
+                              Store 422(@entryPointOutput.ViewVec) 424
+             426:    148(ptr) AccessChain 403(flattenTemp) 278
+             427:   44(fvec3) Load 426
+                              Store 425(@entryPointOutput.LightVec) 427
+             429:    148(ptr) AccessChain 403(flattenTemp) 313
+             430:   44(fvec3) Load 429
+                              Store 428(@entryPointOutput.EyePos) 430
+             432:    148(ptr) AccessChain 403(flattenTemp) 309
+             433:   44(fvec3) Load 432
+                              Store 431(@entryPointOutput.WorldPos) 433
+                              Return
+                              FunctionEnd
+83(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];):62(DSOutput) Function None 78
+       80(input):     38(ptr) FunctionParameter
+   81(TessCoord):     41(ptr) FunctionParameter
+       82(patch):          60 FunctionParameter
+              86:             Label
+     101(output):    100(ptr) Variable Function
+        111(uv1):     41(ptr) Variable Function
+        129(uv2):     41(ptr) Variable Function
+         149(n1):    148(ptr) Variable Function
+         160(n2):    148(ptr) Variable Function
+       179(pos1):    178(ptr) Variable Function
+       190(pos2):    178(ptr) Variable Function
+        201(pos):    178(ptr) Variable Function
+              87:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 85
+              88:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 26 15 15 15 15
+              91:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 89 80(input) 92
+              95:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 93 81(TessCoord) 92
+              98:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 96 82(patch) 92
+              99:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 85 83(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];)
+             105:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 102 101(output) 92
+                              Store 101(output) 110
+             115:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 112 111(uv1) 92
+             121:   39(fvec2) CompositeExtract 82(patch) 0 2
+             123:   39(fvec2) CompositeExtract 82(patch) 1 2
+             125:    124(ptr) AccessChain 81(TessCoord) 15
+             126:    7(float) Load 125
+             127:   39(fvec2) CompositeConstruct 126 126
+             128:   39(fvec2) ExtInst 2(GLSL.std.450) 46(FMix) 121 123 127
+                              Store 111(uv1) 128
+             133:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 130 129(uv2) 92
+             135:   39(fvec2) CompositeExtract 82(patch) 3 2
+             136:   39(fvec2) CompositeExtract 82(patch) 2 2
+             137:    124(ptr) AccessChain 81(TessCoord) 15
+             138:    7(float) Load 137
+             139:   39(fvec2) CompositeConstruct 138 138
+             140:   39(fvec2) ExtInst 2(GLSL.std.450) 46(FMix) 135 136 139
+                              Store 129(uv2) 140
+             141:   39(fvec2) Load 111(uv1)
+             142:   39(fvec2) Load 129(uv2)
+             143:    124(ptr) AccessChain 81(TessCoord) 35
+             144:    7(float) Load 143
+             145:   39(fvec2) CompositeConstruct 144 144
+             146:   39(fvec2) ExtInst 2(GLSL.std.450) 46(FMix) 141 142 145
+             147:     41(ptr) AccessChain 101(output) 120
+                              Store 147 146
+             153:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 150 149(n1) 92
+             154:   44(fvec3) CompositeExtract 82(patch) 0 1
+             155:   44(fvec3) CompositeExtract 82(patch) 1 1
+             156:    124(ptr) AccessChain 81(TessCoord) 15
+             157:    7(float) Load 156
+             158:   44(fvec3) CompositeConstruct 157 157 157
+             159:   44(fvec3) ExtInst 2(GLSL.std.450) 46(FMix) 154 155 158
+                              Store 149(n1) 159
+             164:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 161 160(n2) 92
+             165:   44(fvec3) CompositeExtract 82(patch) 3 1
+             166:   44(fvec3) CompositeExtract 82(patch) 2 1
+             167:    124(ptr) AccessChain 81(TessCoord) 15
+             168:    7(float) Load 167
+             169:   44(fvec3) CompositeConstruct 168 168 168
+             170:   44(fvec3) ExtInst 2(GLSL.std.450) 46(FMix) 165 166 169
+                              Store 160(n2) 170
+             171:   44(fvec3) Load 149(n1)
+             172:   44(fvec3) Load 160(n2)
+             173:    124(ptr) AccessChain 81(TessCoord) 35
+             174:    7(float) Load 173
+             175:   44(fvec3) CompositeConstruct 174 174 174
+             176:   44(fvec3) ExtInst 2(GLSL.std.450) 46(FMix) 171 172 175
+             177:    148(ptr) AccessChain 101(output) 122
+                              Store 177 176
+             183:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 180 179(pos1) 92
+             184:   42(fvec4) CompositeExtract 82(patch) 0 0
+             185:   42(fvec4) CompositeExtract 82(patch) 1 0
+             186:    124(ptr) AccessChain 81(TessCoord) 15
+             187:    7(float) Load 186
+             188:   42(fvec4) CompositeConstruct 187 187 187 187
+             189:   42(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 184 185 188
+                              Store 179(pos1) 189
+             194:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 191 190(pos2) 92
+             195:   42(fvec4) CompositeExtract 82(patch) 3 0
+             196:   42(fvec4) CompositeExtract 82(patch) 2 0
+             197:    124(ptr) AccessChain 81(TessCoord) 15
+             198:    7(float) Load 197
+             199:   42(fvec4) CompositeConstruct 198 198 198 198
+             200:   42(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 195 196 199
+                              Store 190(pos2) 200
+             205:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 202 201(pos) 92
+             206:   42(fvec4) Load 179(pos1)
+             207:   42(fvec4) Load 190(pos2)
+             208:    124(ptr) AccessChain 81(TessCoord) 35
+             209:    7(float) Load 208
+             210:   42(fvec4) CompositeConstruct 209 209 209 209
+             211:   42(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 206 207 210
+                              Store 201(pos) 211
+             223:         212 Load 219(displacementMapTexture)
+             232:         224 Load 229(displacementMapSampler)
+             237:         233 SampledImage 223 232
+             238:     41(ptr) AccessChain 101(output) 120
+             239:   39(fvec2) Load 238
+             240:   42(fvec4) ImageSampleExplicitLod 237 239 Lod 106
+             241:    7(float) CompositeExtract 240 0
+             280:    279(ptr) AccessChain 276 119 278
+             281:    7(float) Load 280
+             282:    7(float) FMul 241 281
+             283:    124(ptr) AccessChain 201(pos) 35
+             284:    7(float) Load 283
+             285:    7(float) FSub 284 282
+             286:    124(ptr) AccessChain 201(pos) 35
+                              Store 286 285
+             287:   42(fvec4) Load 201(pos)
+             289:    288(ptr) AccessChain 276 119 122
+             290:         242 Load 289
+             291:   42(fvec4) VectorTimesMatrix 287 290
+             292:    288(ptr) AccessChain 276 119 119
+             293:         242 Load 292
+             294:   42(fvec4) VectorTimesMatrix 291 293
+             295:    178(ptr) AccessChain 101(output) 119
+                              Store 295 294
+             296:   42(fvec4) Load 201(pos)
+             297:   44(fvec3) VectorShuffle 296 296 0 1 2
+             298:   44(fvec3) FNegate 297
+             299:    148(ptr) AccessChain 101(output) 134
+                              Store 299 298
+             301:    300(ptr) AccessChain 276 119 120
+             302:   42(fvec4) Load 301
+             303:   44(fvec3) VectorShuffle 302 302 0 1 2
+             304:    148(ptr) AccessChain 101(output) 134
+             305:   44(fvec3) Load 304
+             306:   44(fvec3) FAdd 303 305
+             307:   44(fvec3) ExtInst 2(GLSL.std.450) 69(Normalize) 306
+             308:    148(ptr) AccessChain 101(output) 278
+                              Store 308 307
+             310:   42(fvec4) Load 201(pos)
+             311:   44(fvec3) VectorShuffle 310 310 0 1 2
+             312:    148(ptr) AccessChain 101(output) 309
+                              Store 312 311
+             314:   42(fvec4) Load 201(pos)
+             315:    288(ptr) AccessChain 276 119 122
+             316:         242 Load 315
+             317:   42(fvec4) VectorTimesMatrix 314 316
+             318:   44(fvec3) VectorShuffle 317 317 0 1 2
+             319:    148(ptr) AccessChain 101(output) 313
+                              Store 319 318
+             320:62(DSOutput) Load 101(output)
+                              ReturnValue 320
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.vert.out b/Test/baseResults/spv.debuginfo.hlsl.vert.out
new file mode 100644
index 0000000..a7af432
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.hlsl.vert.out
@@ -0,0 +1,574 @@
+spv.debuginfo.hlsl.vert
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 437
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 5  "main" 386 389 393 396 399 402 406 410 418 422 425 428 431 434
+               9:             String  "float"
+              12:             String  "uint"
+              23:             String  "int"
+              28:             String  "instanceRot"
+              30:             String  ""
+              35:             String  "UV"
+              42:             String  "instanceScale"
+              46:             String  "instanceTexIndex"
+              50:             String  "VSInput"
+              59:             String  "Pos"
+              63:             String  "LightVec"
+              70:             String  "VSOutput"
+              75:             String  "@main"
+              81:             String  "input"
+              88:             String  "output"
+             116:             String  "s"
+             128:             String  "modelview"
+             133:             String  "lightPos"
+             137:             String  "globSpeed"
+             141:             String  "UBO"
+             144:             String  "ubo"
+             159:             String  "c"
+             173:             String  "mx"
+             200:             String  "my"
+             226:             String  "mz"
+             240:             String  "rotMat"
+             264:             String  "gRotMat"
+             284:             String  "locPos"
+             297:             String  "pos"
+             355:             String  "lPos"
+                              Name 5  "main"
+                              Name 26  "VSInput"
+                              MemberName 26(VSInput) 0  "Pos"
+                              MemberName 26(VSInput) 1  "Normal"
+                              MemberName 26(VSInput) 2  "UV"
+                              MemberName 26(VSInput) 3  "Color"
+                              MemberName 26(VSInput) 4  "instancePos"
+                              MemberName 26(VSInput) 5  "instanceRot"
+                              MemberName 26(VSInput) 6  "instanceScale"
+                              MemberName 26(VSInput) 7  "instanceTexIndex"
+                              Name 57  "VSOutput"
+                              MemberName 57(VSOutput) 0  "Pos"
+                              MemberName 57(VSOutput) 1  "Normal"
+                              MemberName 57(VSOutput) 2  "Color"
+                              MemberName 57(VSOutput) 3  "UV"
+                              MemberName 57(VSOutput) 4  "ViewVec"
+                              MemberName 57(VSOutput) 5  "LightVec"
+                              Name 74  "@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;"
+                              Name 73  "input"
+                              Name 86  "output"
+                              Name 114  "s"
+                              Name 126  "UBO"
+                              MemberName 126(UBO) 0  "projection"
+                              MemberName 126(UBO) 1  "modelview"
+                              MemberName 126(UBO) 2  "lightPos"
+                              MemberName 126(UBO) 3  "locSpeed"
+                              MemberName 126(UBO) 4  "globSpeed"
+                              Name 142  "ubo"
+                              MemberName 142(ubo) 0  "ubo"
+                              Name 148  ""
+                              Name 157  "c"
+                              Name 171  "mx"
+                              Name 198  "my"
+                              Name 224  "mz"
+                              Name 238  "rotMat"
+                              Name 262  "gRotMat"
+                              Name 282  "locPos"
+                              Name 295  "pos"
+                              Name 353  "lPos"
+                              Name 384  "input"
+                              Name 386  "input.Pos"
+                              Name 389  "input.Normal"
+                              Name 393  "input.UV"
+                              Name 396  "input.Color"
+                              Name 399  "input.instancePos"
+                              Name 402  "input.instanceRot"
+                              Name 406  "input.instanceScale"
+                              Name 410  "input.instanceTexIndex"
+                              Name 413  "flattenTemp"
+                              Name 414  "param"
+                              Name 418  "@entryPointOutput.Pos"
+                              Name 422  "@entryPointOutput.Normal"
+                              Name 425  "@entryPointOutput.Color"
+                              Name 428  "@entryPointOutput.UV"
+                              Name 431  "@entryPointOutput.ViewVec"
+                              Name 434  "@entryPointOutput.LightVec"
+                              MemberDecorate 126(UBO) 0 RowMajor
+                              MemberDecorate 126(UBO) 0 Offset 0
+                              MemberDecorate 126(UBO) 0 MatrixStride 16
+                              MemberDecorate 126(UBO) 1 RowMajor
+                              MemberDecorate 126(UBO) 1 Offset 64
+                              MemberDecorate 126(UBO) 1 MatrixStride 16
+                              MemberDecorate 126(UBO) 2 Offset 128
+                              MemberDecorate 126(UBO) 3 Offset 144
+                              MemberDecorate 126(UBO) 4 Offset 148
+                              MemberDecorate 142(ubo) 0 Offset 0
+                              Decorate 142(ubo) Block
+                              Decorate 148 DescriptorSet 0
+                              Decorate 148 Binding 0
+                              Decorate 386(input.Pos) Location 0
+                              Decorate 389(input.Normal) Location 1
+                              Decorate 393(input.UV) Location 2
+                              Decorate 396(input.Color) Location 3
+                              Decorate 399(input.instancePos) Location 4
+                              Decorate 402(input.instanceRot) Location 5
+                              Decorate 406(input.instanceScale) Location 6
+                              Decorate 410(input.instanceTexIndex) Location 7
+                              Decorate 418(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 422(@entryPointOutput.Normal) Location 0
+                              Decorate 425(@entryPointOutput.Color) Location 1
+                              Decorate 428(@entryPointOutput.UV) Location 2
+                              Decorate 431(@entryPointOutput.ViewVec) Location 3
+                              Decorate 434(@entryPointOutput.LightVec) Location 4
+               3:             TypeVoid
+               4:             TypeFunction 3
+               7:             TypeFloat 32
+              10:             TypeInt 32 0
+              13:     10(int) Constant 32
+              14:     10(int) Constant 6
+              15:     10(int) Constant 0
+              11:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 12 13 14 15
+              16:     10(int) Constant 3
+               8:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 9 13 16 15
+              17:             TypeVector 7(float) 3
+              18:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 16
+              19:             TypeVector 7(float) 2
+              20:     10(int) Constant 2
+              21:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 20
+              22:             TypeInt 32 1
+              25:     10(int) Constant 4
+              24:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 23 13 25 15
+     26(VSInput):             TypeStruct 17(fvec3) 17(fvec3) 19(fvec2) 17(fvec3) 17(fvec3) 17(fvec3) 7(float) 22(int)
+              29:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 30
+              31:     10(int) Constant 35
+              32:     10(int) Constant 40
+              27:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 28 18 29 31 32 15 15 16
+              33:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 28 18 29 31 32 15 15 16
+              36:     10(int) Constant 30
+              37:     10(int) Constant 31
+              34:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 35 21 29 36 37 15 15 16
+              38:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 28 18 29 31 32 15 15 16
+              39:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 28 18 29 31 32 15 15 16
+              40:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 28 18 29 31 32 15 15 16
+              43:     10(int) Constant 36
+              44:     10(int) Constant 41
+              41:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 42 8 29 43 44 15 15 16
+              47:     10(int) Constant 37
+              48:     10(int) Constant 42
+              45:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 46 24 29 47 48 15 15 16
+              51:     10(int) Constant 1
+              53:     10(int) Constant 5
+              52:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 51 25 29 53
+              49:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 50 51 29 15 15 52 50 15 16 27 33 34 38 39 40 41 45
+              54:             TypePointer Function 26(VSInput)
+              55:             TypeVector 7(float) 4
+              56:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 8 25
+    57(VSOutput):             TypeStruct 55(fvec4) 17(fvec3) 17(fvec3) 17(fvec3) 17(fvec3) 17(fvec3)
+              60:     10(int) Constant 53
+              61:     10(int) Constant 13
+              58:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 59 56 29 60 61 15 15 16
+              64:     10(int) Constant 58
+              62:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 63 18 29 64 47 15 15 16
+              65:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 63 18 29 64 47 15 15 16
+              66:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 63 18 29 64 47 15 15 16
+              67:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 63 18 29 64 47 15 15 16
+              68:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 63 18 29 64 47 15 15 16
+              69:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 70 51 29 15 15 52 70 15 16 58 62 65 66 67 68
+              71:             TypeFunction 57(VSOutput) 54(ptr)
+              72:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 16 69 49
+              76:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 75 72 29 15 15 52 75 16 15
+              80:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 81 49 29 15 15 76 25 51
+              83:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
+              85:             TypePointer Function 57(VSOutput)
+              89:     10(int) Constant 63
+              87:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 88 69 29 89 15 76 25
+              91:    7(float) Constant 0
+              92:   55(fvec4) ConstantComposite 91 91 91 91
+              93:   17(fvec3) ConstantComposite 91 91 91
+              94:57(VSOutput) ConstantComposite 92 93 93 93 93 93
+              95:     22(int) Constant 2
+              96:     22(int) Constant 3
+              97:             TypePointer Function 17(fvec3)
+             101:             TypePointer Function 19(fvec2)
+             104:     22(int) Constant 7
+             105:             TypePointer Function 22(int)
+             113:             TypePointer Function 7(float)
+             117:     10(int) Constant 68
+             115:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 116 8 29 117 15 76 25
+             119:     22(int) Constant 5
+             122:             TypeMatrix 55(fvec4) 4
+             124:             TypeBool
+             125:   124(bool) ConstantTrue
+             123:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 56 25 125
+        126(UBO):             TypeStruct 122 122 55(fvec4) 7(float) 7(float)
+             129:     10(int) Constant 43
+             130:     10(int) Constant 20
+             127:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 128 123 29 129 130 15 15 16
+             131:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 128 123 29 129 130 15 15 16
+             134:     10(int) Constant 44
+             135:     10(int) Constant 17
+             132:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 133 56 29 134 135 15 15 16
+             138:     10(int) Constant 46
+             136:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 137 8 29 138 135 15 15 16
+             139:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 137 8 29 138 135 15 15 16
+             140:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 141 51 29 117 15 52 141 15 16 127 131 132 136 139
+        142(ubo):             TypeStruct 126(UBO)
+             145:     10(int) Constant 49
+             143:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(Radians) 144 140 29 145 47 15 15 16
+             146:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(Fract) 144 51 29 117 15 52 144 15 16 143
+             147:             TypePointer Uniform 142(ubo)
+             148:    147(ptr) Variable Uniform
+             150:     10(int) Constant 8
+             149:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(Atan) 30 146 29 117 15 52 30 148 150
+             151:     22(int) Constant 0
+             152:             TypePointer Uniform 7(float)
+             160:     10(int) Constant 69
+             158:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 159 8 29 160 15 76 25
+             168:             TypeMatrix 17(fvec3) 3
+             169:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108 18 16 125
+             170:             TypePointer Function 168
+             174:     10(int) Constant 71
+             172:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 173 169 29 174 15 76 25
+             181:    7(float) Constant 1065353216
+             201:     10(int) Constant 79
+             199:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 200 169 29 201 15 76 25
+             227:     10(int) Constant 87
+             225:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 226 169 29 227 15 76 25
+             241:     10(int) Constant 91
+             239:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 240 169 29 241 15 76 25
+             250:     22(int) Constant 4
+             261:             TypePointer Function 122
+             265:     10(int) Constant 96
+             263:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 264 123 29 265 15 76 25
+             271:             TypePointer Function 55(fvec4)
+             273:     22(int) Constant 1
+             274:   55(fvec4) ConstantComposite 91 181 91 91
+             280:   55(fvec4) ConstantComposite 91 91 91 181
+             285:     10(int) Constant 101
+             283:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 284 56 29 285 15 76 25
+             298:     10(int) Constant 102
+             296:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 297 56 29 298 15 76 25
+             302:     22(int) Constant 6
+             316:             TypePointer Uniform 122
+             356:     10(int) Constant 108
+             354:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 355 18 29 356 15 76 25
+             358:             TypePointer Uniform 55(fvec4)
+             385:             TypePointer Input 17(fvec3)
+  386(input.Pos):    385(ptr) Variable Input
+389(input.Normal):    385(ptr) Variable Input
+             392:             TypePointer Input 19(fvec2)
+   393(input.UV):    392(ptr) Variable Input
+396(input.Color):    385(ptr) Variable Input
+399(input.instancePos):    385(ptr) Variable Input
+402(input.instanceRot):    385(ptr) Variable Input
+             405:             TypePointer Input 7(float)
+406(input.instanceScale):    405(ptr) Variable Input
+             409:             TypePointer Input 22(int)
+410(input.instanceTexIndex):    409(ptr) Variable Input
+             417:             TypePointer Output 55(fvec4)
+418(@entryPointOutput.Pos):    417(ptr) Variable Output
+             421:             TypePointer Output 17(fvec3)
+422(@entryPointOutput.Normal):    421(ptr) Variable Output
+425(@entryPointOutput.Color):    421(ptr) Variable Output
+428(@entryPointOutput.UV):    421(ptr) Variable Output
+431(@entryPointOutput.ViewVec):    421(ptr) Variable Output
+434(@entryPointOutput.LightVec):    421(ptr) Variable Output
+         5(main):           3 Function None 4
+               6:             Label
+      384(input):     54(ptr) Variable Function
+413(flattenTemp):     85(ptr) Variable Function
+      414(param):     54(ptr) Variable Function
+             387:   17(fvec3) Load 386(input.Pos)
+             388:     97(ptr) AccessChain 384(input) 151
+                              Store 388 387
+             390:   17(fvec3) Load 389(input.Normal)
+             391:     97(ptr) AccessChain 384(input) 273
+                              Store 391 390
+             394:   19(fvec2) Load 393(input.UV)
+             395:    101(ptr) AccessChain 384(input) 95
+                              Store 395 394
+             397:   17(fvec3) Load 396(input.Color)
+             398:     97(ptr) AccessChain 384(input) 96
+                              Store 398 397
+             400:   17(fvec3) Load 399(input.instancePos)
+             401:     97(ptr) AccessChain 384(input) 250
+                              Store 401 400
+             403:   17(fvec3) Load 402(input.instanceRot)
+             404:     97(ptr) AccessChain 384(input) 119
+                              Store 404 403
+             407:    7(float) Load 406(input.instanceScale)
+             408:    113(ptr) AccessChain 384(input) 302
+                              Store 408 407
+             411:     22(int) Load 410(input.instanceTexIndex)
+             412:    105(ptr) AccessChain 384(input) 104
+                              Store 412 411
+             415: 26(VSInput) Load 384(input)
+                              Store 414(param) 415
+             416:57(VSOutput) FunctionCall 74(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;) 414(param)
+                              Store 413(flattenTemp) 416
+             419:    271(ptr) AccessChain 413(flattenTemp) 151
+             420:   55(fvec4) Load 419
+                              Store 418(@entryPointOutput.Pos) 420
+             423:     97(ptr) AccessChain 413(flattenTemp) 273
+             424:   17(fvec3) Load 423
+                              Store 422(@entryPointOutput.Normal) 424
+             426:     97(ptr) AccessChain 413(flattenTemp) 95
+             427:   17(fvec3) Load 426
+                              Store 425(@entryPointOutput.Color) 427
+             429:     97(ptr) AccessChain 413(flattenTemp) 96
+             430:   17(fvec3) Load 429
+                              Store 428(@entryPointOutput.UV) 430
+             432:     97(ptr) AccessChain 413(flattenTemp) 250
+             433:   17(fvec3) Load 432
+                              Store 431(@entryPointOutput.ViewVec) 433
+             435:     97(ptr) AccessChain 413(flattenTemp) 119
+             436:   17(fvec3) Load 435
+                              Store 434(@entryPointOutput.LightVec) 436
+                              Return
+                              FunctionEnd
+74(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;):57(VSOutput) Function None 71
+       73(input):     54(ptr) FunctionParameter
+              77:             Label
+      86(output):     85(ptr) Variable Function
+          114(s):    113(ptr) Variable Function
+          157(c):    113(ptr) Variable Function
+         171(mx):    170(ptr) Variable Function
+         198(my):    170(ptr) Variable Function
+         224(mz):    170(ptr) Variable Function
+     238(rotMat):    170(ptr) Variable Function
+    262(gRotMat):    261(ptr) Variable Function
+     282(locPos):    271(ptr) Variable Function
+        295(pos):    271(ptr) Variable Function
+       353(lPos):     97(ptr) Variable Function
+              78:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 76
+              79:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 29 15 15 15 15
+              82:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 80 73(input) 83
+              84:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 76 74(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;)
+              90:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 87 86(output) 83
+                              Store 86(output) 94
+              98:     97(ptr) AccessChain 73(input) 96
+              99:   17(fvec3) Load 98
+             100:     97(ptr) AccessChain 86(output) 95
+                              Store 100 99
+             102:    101(ptr) AccessChain 73(input) 95
+             103:   19(fvec2) Load 102
+             106:    105(ptr) AccessChain 73(input) 104
+             107:     22(int) Load 106
+             108:    7(float) ConvertSToF 107
+             109:    7(float) CompositeExtract 103 0
+             110:    7(float) CompositeExtract 103 1
+             111:   17(fvec3) CompositeConstruct 109 110 108
+             112:     97(ptr) AccessChain 86(output) 96
+                              Store 112 111
+             118:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 115 114(s) 83
+             120:    113(ptr) AccessChain 73(input) 119 15
+             121:    7(float) Load 120
+             153:    152(ptr) AccessChain 148 151 96
+             154:    7(float) Load 153
+             155:    7(float) FAdd 121 154
+             156:    7(float) ExtInst 2(GLSL.std.450) 13(Sin) 155
+                              Store 114(s) 156
+             161:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 158 157(c) 83
+             162:    113(ptr) AccessChain 73(input) 119 15
+             163:    7(float) Load 162
+             164:    152(ptr) AccessChain 148 151 96
+             165:    7(float) Load 164
+             166:    7(float) FAdd 163 165
+             167:    7(float) ExtInst 2(GLSL.std.450) 14(Cos) 166
+                              Store 157(c) 167
+             175:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 172 171(mx) 83
+             176:    7(float) Load 157(c)
+             177:    7(float) Load 114(s)
+             178:    7(float) FNegate 177
+             179:    7(float) Load 114(s)
+             180:    7(float) Load 157(c)
+             182:   17(fvec3) CompositeConstruct 176 178 91
+             183:   17(fvec3) CompositeConstruct 179 180 91
+             184:   17(fvec3) CompositeConstruct 91 91 181
+             185:         168 CompositeConstruct 182 183 184
+                              Store 171(mx) 185
+             186:    113(ptr) AccessChain 73(input) 119 51
+             187:    7(float) Load 186
+             188:    152(ptr) AccessChain 148 151 96
+             189:    7(float) Load 188
+             190:    7(float) FAdd 187 189
+             191:    7(float) ExtInst 2(GLSL.std.450) 13(Sin) 190
+                              Store 114(s) 191
+             192:    113(ptr) AccessChain 73(input) 119 51
+             193:    7(float) Load 192
+             194:    152(ptr) AccessChain 148 151 96
+             195:    7(float) Load 194
+             196:    7(float) FAdd 193 195
+             197:    7(float) ExtInst 2(GLSL.std.450) 14(Cos) 196
+                              Store 157(c) 197
+             202:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 199 198(my) 83
+             203:    7(float) Load 157(c)
+             204:    7(float) Load 114(s)
+             205:    7(float) FNegate 204
+             206:    7(float) Load 114(s)
+             207:    7(float) Load 157(c)
+             208:   17(fvec3) CompositeConstruct 203 91 205
+             209:   17(fvec3) CompositeConstruct 91 181 91
+             210:   17(fvec3) CompositeConstruct 206 91 207
+             211:         168 CompositeConstruct 208 209 210
+                              Store 198(my) 211
+             212:    113(ptr) AccessChain 73(input) 119 20
+             213:    7(float) Load 212
+             214:    152(ptr) AccessChain 148 151 96
+             215:    7(float) Load 214
+             216:    7(float) FAdd 213 215
+             217:    7(float) ExtInst 2(GLSL.std.450) 13(Sin) 216
+                              Store 114(s) 217
+             218:    113(ptr) AccessChain 73(input) 119 20
+             219:    7(float) Load 218
+             220:    152(ptr) AccessChain 148 151 96
+             221:    7(float) Load 220
+             222:    7(float) FAdd 219 221
+             223:    7(float) ExtInst 2(GLSL.std.450) 14(Cos) 222
+                              Store 157(c) 223
+             228:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 225 224(mz) 83
+             229:    7(float) Load 157(c)
+             230:    7(float) Load 114(s)
+             231:    7(float) FNegate 230
+             232:    7(float) Load 114(s)
+             233:    7(float) Load 157(c)
+             234:   17(fvec3) CompositeConstruct 181 91 91
+             235:   17(fvec3) CompositeConstruct 91 229 231
+             236:   17(fvec3) CompositeConstruct 91 232 233
+             237:         168 CompositeConstruct 234 235 236
+                              Store 224(mz) 237
+             242:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 239 238(rotMat) 83
+             243:         168 Load 171(mx)
+             244:         168 Load 198(my)
+             245:         168 MatrixTimesMatrix 243 244
+             246:         168 Load 224(mz)
+             247:         168 MatrixTimesMatrix 245 246
+                              Store 238(rotMat) 247
+             248:    113(ptr) AccessChain 73(input) 119 51
+             249:    7(float) Load 248
+             251:    152(ptr) AccessChain 148 151 250
+             252:    7(float) Load 251
+             253:    7(float) FAdd 249 252
+             254:    7(float) ExtInst 2(GLSL.std.450) 13(Sin) 253
+                              Store 114(s) 254
+             255:    113(ptr) AccessChain 73(input) 119 51
+             256:    7(float) Load 255
+             257:    152(ptr) AccessChain 148 151 250
+             258:    7(float) Load 257
+             259:    7(float) FAdd 256 258
+             260:    7(float) ExtInst 2(GLSL.std.450) 14(Cos) 259
+                              Store 157(c) 260
+             266:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 263 262(gRotMat) 83
+             267:    7(float) Load 157(c)
+             268:    7(float) Load 114(s)
+             269:    7(float) FNegate 268
+             270:   55(fvec4) CompositeConstruct 267 91 269 91
+             272:    271(ptr) AccessChain 262(gRotMat) 151
+                              Store 272 270
+             275:    271(ptr) AccessChain 262(gRotMat) 273
+                              Store 275 274
+             276:    7(float) Load 114(s)
+             277:    7(float) Load 157(c)
+             278:   55(fvec4) CompositeConstruct 276 91 277 91
+             279:    271(ptr) AccessChain 262(gRotMat) 95
+                              Store 279 278
+             281:    271(ptr) AccessChain 262(gRotMat) 96
+                              Store 281 280
+             286:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 283 282(locPos) 83
+             287:     97(ptr) AccessChain 73(input) 151
+             288:   17(fvec3) Load 287
+             289:         168 Load 238(rotMat)
+             290:   17(fvec3) VectorTimesMatrix 288 289
+             291:    7(float) CompositeExtract 290 0
+             292:    7(float) CompositeExtract 290 1
+             293:    7(float) CompositeExtract 290 2
+             294:   55(fvec4) CompositeConstruct 291 292 293 181
+                              Store 282(locPos) 294
+             299:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 296 295(pos) 83
+             300:   55(fvec4) Load 282(locPos)
+             301:   17(fvec3) VectorShuffle 300 300 0 1 2
+             303:    113(ptr) AccessChain 73(input) 302
+             304:    7(float) Load 303
+             305:   17(fvec3) VectorTimesScalar 301 304
+             306:     97(ptr) AccessChain 73(input) 250
+             307:   17(fvec3) Load 306
+             308:   17(fvec3) FAdd 305 307
+             309:    7(float) CompositeExtract 308 0
+             310:    7(float) CompositeExtract 308 1
+             311:    7(float) CompositeExtract 308 2
+             312:   55(fvec4) CompositeConstruct 309 310 311 181
+                              Store 295(pos) 312
+             313:   55(fvec4) Load 295(pos)
+             314:         122 Load 262(gRotMat)
+             315:   55(fvec4) VectorTimesMatrix 313 314
+             317:    316(ptr) AccessChain 148 151 273
+             318:         122 Load 317
+             319:   55(fvec4) VectorTimesMatrix 315 318
+             320:    316(ptr) AccessChain 148 151 151
+             321:         122 Load 320
+             322:   55(fvec4) VectorTimesMatrix 319 321
+             323:    271(ptr) AccessChain 86(output) 151
+                              Store 323 322
+             324:     97(ptr) AccessChain 73(input) 273
+             325:   17(fvec3) Load 324
+             326:         168 Load 238(rotMat)
+             327:   17(fvec3) VectorTimesMatrix 325 326
+             328:         122 Load 262(gRotMat)
+             329:    316(ptr) AccessChain 148 151 273
+             330:         122 Load 329
+             331:         122 MatrixTimesMatrix 328 330
+             332:   55(fvec4) CompositeExtract 331 0
+             333:   17(fvec3) VectorShuffle 332 332 0 1 2
+             334:   55(fvec4) CompositeExtract 331 1
+             335:   17(fvec3) VectorShuffle 334 334 0 1 2
+             336:   55(fvec4) CompositeExtract 331 2
+             337:   17(fvec3) VectorShuffle 336 336 0 1 2
+             338:         168 CompositeConstruct 333 335 337
+             339:   17(fvec3) VectorTimesMatrix 327 338
+             340:     97(ptr) AccessChain 86(output) 273
+                              Store 340 339
+             341:     97(ptr) AccessChain 73(input) 151
+             342:   17(fvec3) Load 341
+             343:     97(ptr) AccessChain 73(input) 250
+             344:   17(fvec3) Load 343
+             345:   17(fvec3) FAdd 342 344
+             346:    7(float) CompositeExtract 345 0
+             347:    7(float) CompositeExtract 345 1
+             348:    7(float) CompositeExtract 345 2
+             349:   55(fvec4) CompositeConstruct 346 347 348 181
+             350:    316(ptr) AccessChain 148 151 273
+             351:         122 Load 350
+             352:   55(fvec4) VectorTimesMatrix 349 351
+                              Store 295(pos) 352
+             357:           3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 354 353(lPos) 83
+             359:    358(ptr) AccessChain 148 151 95
+             360:   55(fvec4) Load 359
+             361:   17(fvec3) VectorShuffle 360 360 0 1 2
+             362:    316(ptr) AccessChain 148 151 273
+             363:         122 Load 362
+             364:   55(fvec4) CompositeExtract 363 0
+             365:   17(fvec3) VectorShuffle 364 364 0 1 2
+             366:   55(fvec4) CompositeExtract 363 1
+             367:   17(fvec3) VectorShuffle 366 366 0 1 2
+             368:   55(fvec4) CompositeExtract 363 2
+             369:   17(fvec3) VectorShuffle 368 368 0 1 2
+             370:         168 CompositeConstruct 365 367 369
+             371:   17(fvec3) VectorTimesMatrix 361 370
+                              Store 353(lPos) 371
+             372:   17(fvec3) Load 353(lPos)
+             373:   55(fvec4) Load 295(pos)
+             374:   17(fvec3) VectorShuffle 373 373 0 1 2
+             375:   17(fvec3) FSub 372 374
+             376:     97(ptr) AccessChain 86(output) 119
+                              Store 376 375
+             377:   55(fvec4) Load 295(pos)
+             378:   17(fvec3) VectorShuffle 377 377 0 1 2
+             379:   17(fvec3) FNegate 378
+             380:     97(ptr) AccessChain 86(output) 250
+                              Store 380 379
+             381:57(VSOutput) Load 86(output)
+                              ReturnValue 381
+                              FunctionEnd
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
index d46159d..efb9d2e 100644
--- a/Test/baseResults/spv.deepRvalue.frag.out
+++ b/Test/baseResults/spv.deepRvalue.frag.out
@@ -1,6 +1,6 @@
 spv.deepRvalue.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 152
 
                               Capability Shader
diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out
index 50c4770..4d69949 100644
--- a/Test/baseResults/spv.depthOut.frag.out
+++ b/Test/baseResults/spv.depthOut.frag.out
@@ -1,6 +1,6 @@
 spv.depthOut.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.depthUnchanged.frag.out b/Test/baseResults/spv.depthUnchanged.frag.out
index 0074007..34785c0 100644
--- a/Test/baseResults/spv.depthUnchanged.frag.out
+++ b/Test/baseResults/spv.depthUnchanged.frag.out
@@ -1,6 +1,6 @@
 spv.depthUnchanged.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out
index 57c443c..68285a1 100644
--- a/Test/baseResults/spv.deviceGroup.frag.out
+++ b/Test/baseResults/spv.deviceGroup.frag.out
@@ -1,6 +1,6 @@
 spv.deviceGroup.frag
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
index 93c2de8..bddf6f9 100644
--- a/Test/baseResults/spv.discard-dce.frag.out
+++ b/Test/baseResults/spv.discard-dce.frag.out
@@ -1,6 +1,6 @@
 spv.discard-dce.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out
index c240c44..c0196c2 100644
--- a/Test/baseResults/spv.do-simple.vert.out
+++ b/Test/baseResults/spv.do-simple.vert.out
@@ -1,6 +1,6 @@
 spv.do-simple.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.do-while-continue-break.vert.out b/Test/baseResults/spv.do-while-continue-break.vert.out
index 081dc62..26e67fc 100644
--- a/Test/baseResults/spv.do-while-continue-break.vert.out
+++ b/Test/baseResults/spv.do-while-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.do-while-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out
index a57b9b2..145776c 100644
--- a/Test/baseResults/spv.doWhileLoop.frag.out
+++ b/Test/baseResults/spv.doWhileLoop.frag.out
@@ -1,6 +1,6 @@
 spv.doWhileLoop.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
index 800464c..3a5eef8 100644
--- a/Test/baseResults/spv.double.comp.out
+++ b/Test/baseResults/spv.double.comp.out
@@ -1,6 +1,6 @@
 spv.double.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.drawParams.vert.out b/Test/baseResults/spv.drawParams.vert.out
index a8dab45..23ba8a7 100644
--- a/Test/baseResults/spv.drawParams.vert.out
+++ b/Test/baseResults/spv.drawParams.vert.out
@@ -1,6 +1,6 @@
 spv.drawParams.vert
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.earlyAndlateFragmentTests.frag.out b/Test/baseResults/spv.earlyAndlateFragmentTests.frag.out
new file mode 100644
index 0000000..e5b9a42
--- /dev/null
+++ b/Test/baseResults/spv.earlyAndlateFragmentTests.frag.out
@@ -0,0 +1,41 @@
+spv.earlyAndlateFragmentTests.frag
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 16
+
+                              Capability Shader
+                              Extension  "SPV_AMD_shader_early_and_late_fragment_tests"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 11
+                              ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 EarlyAndLateFragmentTestsAMD
+                              ExecutionMode 4 DepthReplacing
+                              ExecutionMode 4 DepthLess
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_fragment_shader_interlock"
+                              SourceExtension  "GL_ARB_shader_stencil_export"
+                              SourceExtension  "GL_EXT_fragment_shading_rate"
+                              Name 4  "main"
+                              Name 8  "gl_FragDepth"
+                              Name 11  "instanceIndex"
+                              Decorate 8(gl_FragDepth) BuiltIn FragDepth
+                              Decorate 11(instanceIndex) Flat
+                              Decorate 11(instanceIndex) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Output 6(float)
+ 8(gl_FragDepth):      7(ptr) Variable Output
+               9:             TypeInt 32 1
+              10:             TypePointer Input 9(int)
+11(instanceIndex):     10(ptr) Variable Input
+              14:    6(float) Constant 1117913088
+         4(main):           2 Function None 3
+               5:             Label
+              12:      9(int) Load 11(instanceIndex)
+              13:    6(float) ConvertSToF 12
+              15:    6(float) FDiv 13 14
+                              Store 8(gl_FragDepth) 15
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
index 8f983cb..273b775 100644
--- a/Test/baseResults/spv.earlyReturnDiscard.frag.out
+++ b/Test/baseResults/spv.earlyReturnDiscard.frag.out
@@ -1,6 +1,6 @@
 spv.earlyReturnDiscard.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 110
 
                               Capability Shader
diff --git a/Test/baseResults/spv.explicittypes.frag.out b/Test/baseResults/spv.explicittypes.frag.out
index 3382872..65d3b1f 100644
--- a/Test/baseResults/spv.explicittypes.frag.out
+++ b/Test/baseResults/spv.explicittypes.frag.out
@@ -1,6 +1,6 @@
 spv.explicittypes.frag
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 576
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ext.AccelDecl.frag.out b/Test/baseResults/spv.ext.AccelDecl.frag.out
index 11d4560..e329ee9 100644
--- a/Test/baseResults/spv.ext.AccelDecl.frag.out
+++ b/Test/baseResults/spv.ext.AccelDecl.frag.out
@@ -1,6 +1,6 @@
 spv.ext.AccelDecl.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
index 880be33..1d1d14a 100644
--- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
@@ -1,15 +1,18 @@
 spv.ext.AnyHitShader.rahit
 // Module Version 10400
-// Generated by (magic number): 8000a
-// Id's are bound by 107
+// Generated by (magic number): 8000b
+// Id's are bound by 108
 
                               Capability GroupNonUniform
                               Capability RayTracingKHR
+                              Capability RayCullMaskKHR
+                              Extension  "SPV_KHR_ray_cull_mask"
                               Extension  "SPV_KHR_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 70 76 80 84 98
+                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 85 99
                               Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_cull_mask"
                               SourceExtension  "GL_EXT_ray_tracing"
                               SourceExtension  "GL_KHR_shader_subgroup_basic"
                               Name 4  "main"
@@ -46,11 +49,11 @@
                               Name 69  "v15"
                               Name 70  "gl_GeometryIndexEXT"
                               Name 75  "v16"
-                              Name 76  "gl_ObjectToWorld3x4EXT"
-                              Name 79  "v17"
-                              Name 80  "gl_WorldToObject3x4EXT"
-                              Name 84  "incomingPayload"
-                              Name 98  "gl_SubgroupSize"
+                              Name 78  "v17"
+                              Name 81  "v18"
+                              Name 82  "gl_CullMaskEXT"
+                              Name 85  "incomingPayload"
+                              Name 99  "gl_SubgroupSize"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -67,13 +70,11 @@
                               Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
                               Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
                               Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
-                              Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
-                              Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
-                              Decorate 84(incomingPayload) Location 1
-                              Decorate 98(gl_SubgroupSize) RelaxedPrecision
-                              Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize
-                              Decorate 99 RelaxedPrecision
+                              Decorate 82(gl_CullMaskEXT) BuiltIn CullMaskKHR
+                              Decorate 99(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 99(gl_SubgroupSize) BuiltIn SubgroupSize
                               Decorate 100 RelaxedPrecision
+                              Decorate 101 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -113,17 +114,16 @@
               72:             TypeVector 28(float) 4
               73:             TypeMatrix 72(fvec4) 3
               74:             TypePointer Function 73
-76(gl_ObjectToWorld3x4EXT):     63(ptr) Variable Input
-80(gl_WorldToObject3x4EXT):     63(ptr) Variable Input
-              83:             TypePointer IncomingRayPayloadKHR 72(fvec4)
-84(incomingPayload):     83(ptr) Variable IncomingRayPayloadKHR
-              85:   28(float) Constant 1056964608
-              86:   72(fvec4) ConstantComposite 85 85 85 85
-              88:     16(int) Constant 1
-              89:             TypeBool
-              94:      6(int) Constant 0
-98(gl_SubgroupSize):     57(ptr) Variable Input
-             101:             TypePointer IncomingRayPayloadKHR 28(float)
+82(gl_CullMaskEXT):     57(ptr) Variable Input
+              84:             TypePointer IncomingRayPayloadKHR 72(fvec4)
+85(incomingPayload):     84(ptr) Variable IncomingRayPayloadKHR
+              86:   28(float) Constant 1056964608
+              87:   72(fvec4) ConstantComposite 86 86 86 86
+              89:     16(int) Constant 1
+              90:             TypeBool
+              95:      6(int) Constant 0
+99(gl_SubgroupSize):     57(ptr) Variable Input
+             102:             TypePointer IncomingRayPayloadKHR 28(float)
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -143,7 +143,8 @@
          66(v14):     61(ptr) Variable Function
          69(v15):     17(ptr) Variable Function
          75(v16):     74(ptr) Variable Function
-         79(v17):     74(ptr) Variable Function
+         78(v17):     74(ptr) Variable Function
+         81(v18):     55(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDEXT)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
@@ -176,26 +177,28 @@
                               Store 66(v14) 68
               71:     16(int) Load 70(gl_GeometryIndexEXT)
                               Store 69(v15) 71
-              77:          60 Load 76(gl_ObjectToWorld3x4EXT)
-              78:          73 Transpose 77
-                              Store 75(v16) 78
-              81:          60 Load 80(gl_WorldToObject3x4EXT)
-              82:          73 Transpose 81
-                              Store 79(v17) 82
-                              Store 84(incomingPayload) 86
-              87:     16(int) Load 18(v2)
-              90:    89(bool) IEqual 87 88
-                              SelectionMerge 92 None
-                              BranchConditional 90 91 92
-              91:               Label
+              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
+                              Store 85(incomingPayload) 87
+              88:     16(int) Load 18(v2)
+              91:    90(bool) IEqual 88 89
+                              SelectionMerge 93 None
+                              BranchConditional 91 92 93
+              92:               Label
                                 IgnoreIntersectionKHR
-              92:             Label
-              99:      6(int) Load 98(gl_SubgroupSize)
-             100:   28(float) ConvertUToF 99
-             102:    101(ptr) AccessChain 84(incomingPayload) 94
-             103:   28(float) Load 102
-             104:   28(float) FAdd 103 100
-             105:    101(ptr) AccessChain 84(incomingPayload) 94
-                              Store 105 104
+              93:             Label
+             100:      6(int) Load 99(gl_SubgroupSize)
+             101:   28(float) ConvertUToF 100
+             103:    102(ptr) AccessChain 85(incomingPayload) 95
+             104:   28(float) Load 103
+             105:   28(float) FAdd 104 101
+             106:    102(ptr) AccessChain 85(incomingPayload) 95
+                              Store 106 105
                               TerminateRayKHR
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
index 40903e6..73a2381 100644
--- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
@@ -1,14 +1,17 @@
 spv.ext.ClosestHitShader.rchit
 // Module Version 10400
-// Generated by (magic number): 8000a
-// Id's are bound by 101
+// Generated by (magic number): 8000b
+// Id's are bound by 102
 
                               Capability RayTracingKHR
+                              Capability RayCullMaskKHR
+                              Extension  "SPV_KHR_ray_cull_mask"
                               Extension  "SPV_KHR_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 70 76 80 85 98 100
+                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 86 99 101
                               Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_cull_mask"
                               SourceExtension  "GL_EXT_ray_tracing"
                               Name 4  "main"
                               Name 9  "v0"
@@ -44,12 +47,12 @@
                               Name 69  "v15"
                               Name 70  "gl_GeometryIndexEXT"
                               Name 75  "v16"
-                              Name 76  "gl_ObjectToWorld3x4EXT"
-                              Name 79  "v17"
-                              Name 80  "gl_WorldToObject3x4EXT"
-                              Name 85  "accEXT"
-                              Name 98  "incomingPayload"
-                              Name 100  "localPayload"
+                              Name 78  "v17"
+                              Name 81  "v18"
+                              Name 82  "gl_CullMaskEXT"
+                              Name 86  "accEXT"
+                              Name 99  "incomingPayload"
+                              Name 101  "localPayload"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -66,12 +69,9 @@
                               Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
                               Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
                               Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
-                              Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
-                              Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
-                              Decorate 85(accEXT) DescriptorSet 0
-                              Decorate 85(accEXT) Binding 0
-                              Decorate 98(incomingPayload) Location 1
-                              Decorate 100(localPayload) Location 0
+                              Decorate 82(gl_CullMaskEXT) BuiltIn CullMaskKHR
+                              Decorate 86(accEXT) DescriptorSet 0
+                              Decorate 86(accEXT) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -111,25 +111,24 @@
               72:             TypeVector 28(float) 4
               73:             TypeMatrix 72(fvec4) 3
               74:             TypePointer Function 73
-76(gl_ObjectToWorld3x4EXT):     63(ptr) Variable Input
-80(gl_WorldToObject3x4EXT):     63(ptr) Variable Input
-              83:             TypeAccelerationStructureKHR
-              84:             TypePointer UniformConstant 83
-      85(accEXT):     84(ptr) Variable UniformConstant
-              87:      6(int) Constant 0
-              88:      6(int) Constant 1
-              89:      6(int) Constant 2
-              90:      6(int) Constant 3
-              91:   28(float) Constant 1056964608
-              92:   29(fvec3) ConstantComposite 91 91 91
-              93:   28(float) Constant 1065353216
-              94:   29(fvec3) ConstantComposite 93 93 93
-              95:   28(float) Constant 1061158912
-              96:     16(int) Constant 1
-              97:             TypePointer IncomingRayPayloadKHR 72(fvec4)
-98(incomingPayload):     97(ptr) Variable IncomingRayPayloadKHR
-              99:             TypePointer RayPayloadKHR 72(fvec4)
-100(localPayload):     99(ptr) Variable RayPayloadKHR
+82(gl_CullMaskEXT):     57(ptr) Variable Input
+              84:             TypeAccelerationStructureKHR
+              85:             TypePointer UniformConstant 84
+      86(accEXT):     85(ptr) Variable UniformConstant
+              88:      6(int) Constant 0
+              89:      6(int) Constant 1
+              90:      6(int) Constant 2
+              91:      6(int) Constant 3
+              92:   28(float) Constant 1056964608
+              93:   29(fvec3) ConstantComposite 92 92 92
+              94:   28(float) Constant 1065353216
+              95:   29(fvec3) ConstantComposite 94 94 94
+              96:   28(float) Constant 1061158912
+              97:     16(int) Constant 1
+              98:             TypePointer IncomingRayPayloadKHR 72(fvec4)
+99(incomingPayload):     98(ptr) Variable IncomingRayPayloadKHR
+             100:             TypePointer RayPayloadKHR 72(fvec4)
+101(localPayload):    100(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -149,7 +148,8 @@
          66(v14):     61(ptr) Variable Function
          69(v15):     17(ptr) Variable Function
          75(v16):     74(ptr) Variable Function
-         79(v17):     74(ptr) Variable Function
+         78(v17):     74(ptr) Variable Function
+         81(v18):     55(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDEXT)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
@@ -182,13 +182,15 @@
                               Store 66(v14) 68
               71:     16(int) Load 70(gl_GeometryIndexEXT)
                               Store 69(v15) 71
-              77:          60 Load 76(gl_ObjectToWorld3x4EXT)
-              78:          73 Transpose 77
-                              Store 75(v16) 78
-              81:          60 Load 80(gl_WorldToObject3x4EXT)
-              82:          73 Transpose 81
-                              Store 79(v17) 82
-              86:          83 Load 85(accEXT)
-                              TraceRayKHR 86 87 88 89 90 87 92 91 94 95 98(incomingPayload)
+              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
+              87:          84 Load 86(accEXT)
+                              TraceRayKHR 87 88 89 90 91 88 93 92 95 96 99(incomingPayload)
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out
index 7f5af89..e5b62d7 100644
--- a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out
+++ b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out
@@ -1,6 +1,6 @@
 spv.ext.ClosestHitShader_Subgroup.rchit
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 67
 
                               Capability Int64
@@ -34,7 +34,6 @@
                               Name 61  "gl_SMIDNV"
                               Decorate 8(accEXT) DescriptorSet 0
                               Decorate 8(accEXT) Binding 0
-                              Decorate 26(incomingPayload) Location 1
                               Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision
                               Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
                               Decorate 29 RelaxedPrecision
diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out
index 2d389a0..fad466b 100644
--- a/Test/baseResults/spv.ext.IntersectShader.rint.out
+++ b/Test/baseResults/spv.ext.IntersectShader.rint.out
@@ -1,14 +1,17 @@
 spv.ext.IntersectShader.rint
 // Module Version 10400
-// Generated by (magic number): 8000a
-// Id's are bound by 81
+// Generated by (magic number): 8000b
+// Id's are bound by 84
 
                               Capability RayTracingKHR
+                              Capability RayCullMaskKHR
+                              Extension  "SPV_KHR_ray_cull_mask"
                               Extension  "SPV_KHR_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint IntersectionKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69 73
+                              EntryPoint IntersectionKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 73 76
                               Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_cull_mask"
                               SourceExtension  "GL_EXT_ray_tracing"
                               Name 4  "main"
                               Name 9  "v0"
@@ -38,10 +41,10 @@
                               Name 58  "v12"
                               Name 59  "gl_WorldToObjectEXT"
                               Name 64  "v13"
-                              Name 65  "gl_ObjectToWorld3x4EXT"
-                              Name 68  "v14"
-                              Name 69  "gl_WorldToObject3x4EXT"
-                              Name 73  "iAttr"
+                              Name 67  "v14"
+                              Name 71  "v15"
+                              Name 73  "gl_CullMaskEXT"
+                              Name 76  "iAttr"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -57,8 +60,7 @@
                               Decorate 50(gl_RayTmaxEXT) Coherent
                               Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
                               Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
-                              Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
-                              Decorate 69(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
+                              Decorate 73(gl_CullMaskEXT) BuiltIn CullMaskKHR
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -93,16 +95,17 @@
               61:             TypeVector 28(float) 4
               62:             TypeMatrix 61(fvec4) 3
               63:             TypePointer Function 62
-65(gl_ObjectToWorld3x4EXT):     55(ptr) Variable Input
-69(gl_WorldToObject3x4EXT):     55(ptr) Variable Input
-              72:             TypePointer HitAttributeKHR 61(fvec4)
-       73(iAttr):     72(ptr) Variable HitAttributeKHR
-              74:   28(float) Constant 1056964608
-              75:   28(float) Constant 0
-              76:   28(float) Constant 1065353216
-              77:   61(fvec4) ConstantComposite 74 74 75 76
-              78:      6(int) Constant 1
-              79:             TypeBool
+              70:             TypePointer Function 6(int)
+              72:             TypePointer Input 6(int)
+73(gl_CullMaskEXT):     72(ptr) Variable Input
+              75:             TypePointer HitAttributeKHR 61(fvec4)
+       76(iAttr):     75(ptr) Variable HitAttributeKHR
+              77:   28(float) Constant 1056964608
+              78:   28(float) Constant 0
+              79:   28(float) Constant 1065353216
+              80:   61(fvec4) ConstantComposite 77 77 78 79
+              81:      6(int) Constant 1
+              82:             TypeBool
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -119,7 +122,8 @@
          54(v11):     53(ptr) Variable Function
          58(v12):     53(ptr) Variable Function
          64(v13):     63(ptr) Variable Function
-         68(v14):     63(ptr) Variable Function
+         67(v14):     63(ptr) Variable Function
+         71(v15):     70(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDEXT)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
@@ -146,13 +150,15 @@
                               Store 54(v11) 57
               60:          52 Load 59(gl_WorldToObjectEXT)
                               Store 58(v12) 60
-              66:          52 Load 65(gl_ObjectToWorld3x4EXT)
-              67:          62 Transpose 66
-                              Store 64(v13) 67
-              70:          52 Load 69(gl_WorldToObject3x4EXT)
-              71:          62 Transpose 70
-                              Store 68(v14) 71
-                              Store 73(iAttr) 77
-              80:    79(bool) ReportIntersectionKHR 74 78
+              65:          52 Load 56(gl_ObjectToWorldEXT)
+              66:          62 Transpose 65
+                              Store 64(v13) 66
+              68:          52 Load 59(gl_WorldToObjectEXT)
+              69:          62 Transpose 68
+                              Store 67(v14) 69
+              74:      6(int) Load 73(gl_CullMaskEXT)
+                              Store 71(v15) 74
+                              Store 76(iAttr) 80
+              83:    82(bool) ReportIntersectionKHR 77 81
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out
index d2dfc17..246eefa 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): 8000a
-// Id's are bound by 90
+// Generated by (magic number): 8000b
+// Id's are bound by 94
 
                               Capability MinLod
                               Capability GroupNonUniform
@@ -9,15 +9,18 @@
                               Capability SubgroupBallotKHR
                               Capability RayTracingKHR
                               Capability ShaderSMBuiltinsNV
+                              Capability RayCullMaskKHR
+                              Extension  "SPV_KHR_ray_cull_mask"
                               Extension  "SPV_KHR_ray_tracing"
                               Extension  "SPV_KHR_shader_ballot"
                               Extension  "SPV_NV_shader_sm_builtins"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 32 36 51 53 58 63 74 78 85 89
+                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 32 37 41 56 57 62 67 78 82 89 93
                               Source GLSL 460
                               SourceExtension  "GL_ARB_shader_ballot"
                               SourceExtension  "GL_ARB_sparse_texture_clamp"
+                              SourceExtension  "GL_EXT_ray_cull_mask"
                               SourceExtension  "GL_EXT_ray_tracing"
                               SourceExtension  "GL_KHR_shader_subgroup_ballot"
                               SourceExtension  "GL_KHR_shader_subgroup_basic"
@@ -35,39 +38,40 @@
                               Name 29  "gl_RayTminEXT"
                               Name 31  "v5"
                               Name 32  "gl_RayTmaxEXT"
-                              Name 36  "accEXT"
-                              Name 51  "incomingPayload"
-                              Name 53  "gl_SubGroupSizeARB"
-                              Name 58  "gl_SubgroupEqMask"
-                              Name 63  "gl_WarpIDNV"
-                              Name 70  "texel"
-                              Name 74  "s2D"
-                              Name 78  "c2"
-                              Name 85  "lodClamp"
-                              Name 89  "localPayload"
+                              Name 35  "v6"
+                              Name 37  "gl_CullMaskEXT"
+                              Name 41  "accEXT"
+                              Name 56  "incomingPayload"
+                              Name 57  "gl_SubGroupSizeARB"
+                              Name 62  "gl_SubgroupEqMask"
+                              Name 67  "gl_WarpIDNV"
+                              Name 74  "texel"
+                              Name 78  "s2D"
+                              Name 82  "c2"
+                              Name 89  "lodClamp"
+                              Name 93  "localPayload"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
                               Decorate 24(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
                               Decorate 29(gl_RayTminEXT) BuiltIn RayTminKHR
                               Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
-                              Decorate 36(accEXT) DescriptorSet 0
-                              Decorate 36(accEXT) Binding 0
-                              Decorate 51(incomingPayload) Location 1
-                              Decorate 53(gl_SubGroupSizeARB) BuiltIn SubgroupSize
-                              Decorate 53(gl_SubGroupSizeARB) Volatile
-                              Decorate 53(gl_SubGroupSizeARB) Coherent
-                              Decorate 58(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
-                              Decorate 58(gl_SubgroupEqMask) Volatile
-                              Decorate 58(gl_SubgroupEqMask) Coherent
-                              Decorate 63(gl_WarpIDNV) BuiltIn WarpIDNV
-                              Decorate 63(gl_WarpIDNV) Volatile
-                              Decorate 63(gl_WarpIDNV) Coherent
-                              Decorate 74(s2D) DescriptorSet 0
-                              Decorate 74(s2D) Binding 1
-                              Decorate 78(c2) Location 2
-                              Decorate 85(lodClamp) Location 3
-                              Decorate 89(localPayload) Location 0
+                              Decorate 37(gl_CullMaskEXT) BuiltIn CullMaskKHR
+                              Decorate 41(accEXT) DescriptorSet 0
+                              Decorate 41(accEXT) Binding 0
+                              Decorate 57(gl_SubGroupSizeARB) BuiltIn SubgroupSize
+                              Decorate 57(gl_SubGroupSizeARB) Volatile
+                              Decorate 57(gl_SubGroupSizeARB) Coherent
+                              Decorate 62(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
+                              Decorate 62(gl_SubgroupEqMask) Volatile
+                              Decorate 62(gl_SubgroupEqMask) Coherent
+                              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 82(c2) Location 2
+                              Decorate 89(lodClamp) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -86,44 +90,46 @@
               28:             TypePointer Input 16(float)
 29(gl_RayTminEXT):     28(ptr) Variable Input
 32(gl_RayTmaxEXT):     28(ptr) Variable Input
-              34:             TypeAccelerationStructureKHR
-              35:             TypePointer UniformConstant 34
-      36(accEXT):     35(ptr) Variable UniformConstant
-              38:      6(int) Constant 0
-              39:      6(int) Constant 1
-              40:      6(int) Constant 2
-              41:      6(int) Constant 3
-              42:   16(float) Constant 1056964608
-              43:   17(fvec3) ConstantComposite 42 42 42
-              44:   16(float) Constant 1065353216
-              45:   17(fvec3) ConstantComposite 44 44 44
-              46:   16(float) Constant 1061158912
-              47:             TypeInt 32 1
-              48:     47(int) Constant 1
-              49:             TypeVector 16(float) 4
-              50:             TypePointer IncomingRayPayloadKHR 49(fvec4)
-51(incomingPayload):     50(ptr) Variable IncomingRayPayloadKHR
-              52:             TypePointer Input 6(int)
-53(gl_SubGroupSizeARB):     52(ptr) Variable Input
-              56:             TypeVector 6(int) 4
-              57:             TypePointer Input 56(ivec4)
-58(gl_SubgroupEqMask):     57(ptr) Variable Input
- 63(gl_WarpIDNV):     52(ptr) Variable Input
-              67:             TypePointer IncomingRayPayloadKHR 16(float)
-              69:             TypePointer Function 49(fvec4)
-              71:             TypeImage 16(float) 2D sampled format:Unknown
-              72:             TypeSampledImage 71
-              73:             TypePointer UniformConstant 72
-         74(s2D):     73(ptr) Variable UniformConstant
-              76:             TypeVector 16(float) 2
-              77:             TypePointer Input 76(fvec2)
-          78(c2):     77(ptr) Variable Input
-              82:             TypeVector 47(int) 2
-              83:     47(int) Constant 5
-              84:   82(ivec2) ConstantComposite 83 83
-    85(lodClamp):     28(ptr) Variable Input
-              88:             TypePointer RayPayloadKHR 49(fvec4)
-89(localPayload):     88(ptr) Variable RayPayloadKHR
+              34:             TypePointer Function 6(int)
+              36:             TypePointer Input 6(int)
+37(gl_CullMaskEXT):     36(ptr) Variable Input
+              39:             TypeAccelerationStructureKHR
+              40:             TypePointer UniformConstant 39
+      41(accEXT):     40(ptr) Variable UniformConstant
+              43:      6(int) Constant 0
+              44:      6(int) Constant 1
+              45:      6(int) Constant 2
+              46:      6(int) Constant 3
+              47:   16(float) Constant 1056964608
+              48:   17(fvec3) ConstantComposite 47 47 47
+              49:   16(float) Constant 1065353216
+              50:   17(fvec3) ConstantComposite 49 49 49
+              51:   16(float) Constant 1061158912
+              52:             TypeInt 32 1
+              53:     52(int) Constant 1
+              54:             TypeVector 16(float) 4
+              55:             TypePointer IncomingRayPayloadKHR 54(fvec4)
+56(incomingPayload):     55(ptr) Variable IncomingRayPayloadKHR
+57(gl_SubGroupSizeARB):     36(ptr) Variable Input
+              60:             TypeVector 6(int) 4
+              61:             TypePointer Input 60(ivec4)
+62(gl_SubgroupEqMask):     61(ptr) Variable Input
+ 67(gl_WarpIDNV):     36(ptr) Variable Input
+              71:             TypePointer IncomingRayPayloadKHR 16(float)
+              73:             TypePointer Function 54(fvec4)
+              75:             TypeImage 16(float) 2D sampled format:Unknown
+              76:             TypeSampledImage 75
+              77:             TypePointer UniformConstant 76
+         78(s2D):     77(ptr) Variable UniformConstant
+              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
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -132,7 +138,8 @@
           23(v3):     18(ptr) Variable Function
           27(v4):     26(ptr) Variable Function
           31(v5):     26(ptr) Variable Function
-       70(texel):     69(ptr) Variable Function
+          35(v6):     34(ptr) Variable Function
+       74(texel):     73(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDEXT)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
@@ -145,25 +152,27 @@
                               Store 27(v4) 30
               33:   16(float) Load 32(gl_RayTmaxEXT)
                               Store 31(v5) 33
-              37:          34 Load 36(accEXT)
-                              TraceRayKHR 37 38 39 40 41 38 43 42 45 46 51(incomingPayload)
-              54:      6(int) Load 53(gl_SubGroupSizeARB)
-              55:   16(float) ConvertUToF 54
-              59:   56(ivec4) Load 58(gl_SubgroupEqMask)
-              60:   49(fvec4) ConvertUToF 59
-              61:   16(float) CompositeExtract 60 0
-              62:   16(float) FAdd 55 61
-              64:      6(int) Load 63(gl_WarpIDNV)
-              65:   16(float) ConvertUToF 64
-              66:   16(float) FAdd 62 65
-              68:     67(ptr) AccessChain 51(incomingPayload) 38
-                              Store 68 66
-              75:          72 Load 74(s2D)
-              79:   76(fvec2) Load 78(c2)
-              80:   76(fvec2) Load 78(c2)
-              81:   76(fvec2) Load 78(c2)
-              86:   16(float) Load 85(lodClamp)
-              87:   49(fvec4) ImageSampleExplicitLod 75 79 Grad ConstOffset MinLod 80 81 84 86
-                              Store 70(texel) 87
+              38:      6(int) Load 37(gl_CullMaskEXT)
+                              Store 35(v6) 38
+              42:          39 Load 41(accEXT)
+                              TraceRayKHR 42 43 44 45 46 43 48 47 50 51 56(incomingPayload)
+              58:      6(int) Load 57(gl_SubGroupSizeARB)
+              59:   16(float) ConvertUToF 58
+              63:   60(ivec4) Load 62(gl_SubgroupEqMask)
+              64:   54(fvec4) ConvertUToF 63
+              65:   16(float) CompositeExtract 64 0
+              66:   16(float) FAdd 59 65
+              68:      6(int) Load 67(gl_WarpIDNV)
+              69:   16(float) ConvertUToF 68
+              70:   16(float) FAdd 66 69
+              72:     71(ptr) AccessChain 56(incomingPayload) 43
+                              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayCallable.rcall.out b/Test/baseResults/spv.ext.RayCallable.rcall.out
index d429116..9e6cef1 100644
--- a/Test/baseResults/spv.ext.RayCallable.rcall.out
+++ b/Test/baseResults/spv.ext.RayCallable.rcall.out
@@ -1,6 +1,6 @@
 spv.ext.RayCallable.rcall
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability RayTracingKHR
@@ -22,8 +22,6 @@
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 16(dataBlock) Block
-                              Decorate 18 Location 1
-                              Decorate 29(data0) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out
index afd5083..9cd294a 100644
--- a/Test/baseResults/spv.ext.RayConstants.rgen.out
+++ b/Test/baseResults/spv.ext.RayConstants.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayConstants.rgen
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability RayTracingKHR
@@ -15,7 +15,6 @@
                               Name 26  "payload"
                               Decorate 8(accEXT) DescriptorSet 0
                               Decorate 8(accEXT) Binding 0
-                              Decorate 26(payload) Location 1
                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 95d9213..31a8bda 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenSBTlayout.rgen
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 74
 
                               Capability Int64
@@ -49,7 +49,6 @@
                               MemberDecorate 36(block) 9 Offset 120
                               MemberDecorate 36(block) 10 Offset 128
                               Decorate 36(block) Block
-                              Decorate 60(payload) Location 1
                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 f5e32c1..f0302f7 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenSBTlayout140.rgen
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 74
 
                               Capability Int64
@@ -49,7 +49,6 @@
                               MemberDecorate 36(block) 9 Offset 136
                               MemberDecorate 36(block) 10 Offset 144
                               Decorate 36(block) Block
-                              Decorate 60(payload) Location 1
                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 d952adf..e83dd42 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenSBTlayout430.rgen
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 74
 
                               Capability Int64
@@ -49,7 +49,6 @@
                               MemberDecorate 36(block) 9 Offset 120
                               MemberDecorate 36(block) 10 Offset 128
                               Decorate 36(block) Block
-                              Decorate 60(payload) Location 1
                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 c6d6530..a24b64c 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenSBTlayoutscalar.rgen
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 74
 
                               Capability Int64
@@ -50,7 +50,6 @@
                               MemberDecorate 36(block) 9 Offset 96
                               MemberDecorate 36(block) 10 Offset 104
                               Decorate 36(block) Block
-                              Decorate 60(payload) Location 1
                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 bfaf64b..b872d9e 100644
--- a/Test/baseResults/spv.ext.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenShader.rgen
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 58
 
                               Capability RayTraversalPrimitiveCullingKHR
@@ -10,6 +10,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint RayGenerationKHR 4  "main" 11 21 29 40 53 54 57
                               Source GLSL 460
+                              SourceExtension  "GL_EXT_opacity_micromap"
                               SourceExtension  "GL_EXT_ray_flags_primitive_culling"
                               SourceExtension  "GL_EXT_ray_tracing"
                               Name 4  "main"
@@ -34,7 +35,6 @@
                               MemberDecorate 38(block) 0 Offset 0
                               MemberDecorate 38(block) 1 Offset 16
                               Decorate 38(block) Block
-                              Decorate 53(payload) Location 1
                               Decorate 54(accEXT1) DescriptorSet 0
                               Decorate 54(accEXT1) Binding 1
                               Decorate 57(imageu) DescriptorSet 0
@@ -53,7 +53,7 @@
               27:             TypeAccelerationStructureKHR
               28:             TypePointer UniformConstant 27
      29(accEXT0):     28(ptr) Variable UniformConstant
-              35:      6(int) Constant 768
+              35:      6(int) Constant 1792
               36:             TypeFloat 32
               37:             TypeVector 36(float) 3
        38(block):             TypeStruct 37(fvec3) 37(fvec3)
diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
index 048b02b..d79f4f3 100644
--- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenShader11.rgen
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 53
 
                               Capability RayTracingKHR
@@ -30,7 +30,6 @@
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
                               Decorate 37(block) Block
-                              Decorate 52(payload) Location 1
                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 ee39e35..7e351d7 100644
--- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenShaderArray.rgen
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 117
 
                               Capability Int64
@@ -43,7 +43,6 @@
                               MemberDecorate 36(block) 3 Offset 32
                               MemberDecorate 36(block) 4 Offset 40
                               Decorate 36(block) Block
-                              Decorate 61(payload) Location 1
                               Decorate 65(accEXT1) DescriptorSet 0
                               Decorate 65(accEXT1) Binding 1
                               Decorate 80 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.ext.RayQueryDecl.frag.out b/Test/baseResults/spv.ext.RayQueryDecl.frag.out
index 97681e9..2eb1421 100644
--- a/Test/baseResults/spv.ext.RayQueryDecl.frag.out
+++ b/Test/baseResults/spv.ext.RayQueryDecl.frag.out
@@ -1,6 +1,6 @@
 spv.ext.RayQueryDecl.frag
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ext.World3x4.rahit.out b/Test/baseResults/spv.ext.World3x4.rahit.out
index 40d73d1..92ad18f 100644
--- a/Test/baseResults/spv.ext.World3x4.rahit.out
+++ b/Test/baseResults/spv.ext.World3x4.rahit.out
@@ -1,6 +1,6 @@
 spv.ext.World3x4.rahit
 // Module Version 10400
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 90
 
                               Capability RayTracingKHR
@@ -28,7 +28,6 @@
                               Decorate 60(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
                               Decorate 78(result) DescriptorSet 0
                               Decorate 78(result) Binding 0
-                              Decorate 89(hitValue) Location 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
new file mode 100644
index 0000000..c1f6f7c
--- /dev/null
+++ b/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out
@@ -0,0 +1,273 @@
+spv.ext.meshShaderBuiltins.mesh
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 159
+
+                              Capability ClipDistance
+                              Capability CullDistance
+                              Capability FragmentShadingRateKHR
+                              Capability DrawParameters
+                              Capability MultiView
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+                              Extension  "SPV_KHR_fragment_shading_rate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 13 19 24 41 93 135 153 156
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 460
+                              SourceExtension  "GL_ARB_shader_draw_parameters"
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              SourceExtension  "GL_EXT_multiview"
+                              Name 4  "main"
+                              Name 6  "testAdditionalBuiltins("
+                              Name 10  "iid"
+                              Name 13  "gl_LocalInvocationID"
+                              Name 18  "gid"
+                              Name 19  "gl_WorkGroupID"
+                              Name 23  "numWorkGrous"
+                              Name 24  "gl_NumWorkGroups"
+                              Name 26  "vertexCount"
+                              Name 28  "primitiveCount"
+                              Name 38  "gl_MeshPerVertexEXT"
+                              MemberName 38(gl_MeshPerVertexEXT) 0  "gl_Position"
+                              MemberName 38(gl_MeshPerVertexEXT) 1  "gl_PointSize"
+                              MemberName 38(gl_MeshPerVertexEXT) 2  "gl_ClipDistance"
+                              MemberName 38(gl_MeshPerVertexEXT) 3  "gl_CullDistance"
+                              Name 41  "gl_MeshVerticesEXT"
+                              Name 90  "gl_MeshPerPrimitiveEXT"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 0  "gl_PrimitiveID"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 1  "gl_Layer"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 2  "gl_ViewportIndex"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 3  "gl_CullPrimitiveEXT"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 4  "gl_PrimitiveShadingRateEXT"
+                              Name 93  "gl_MeshPrimitivesEXT"
+                              Name 135  "gl_PrimitiveTriangleIndicesEXT"
+                              Name 151  "id"
+                              Name 153  "gl_DrawIDARB"
+                              Name 155  "viewIdx"
+                              Name 156  "gl_ViewIndex"
+                              Decorate 13(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 24(gl_NumWorkGroups) BuiltIn NumWorkgroups
+                              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
+                              Decorate 135(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
+                              Decorate 153(gl_DrawIDARB) BuiltIn DrawIndex
+                              Decorate 156(gl_ViewIndex) BuiltIn ViewIndex
+                              Decorate 158 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeInt 32 0
+               9:             TypePointer Function 8(int)
+              11:             TypeVector 8(int) 3
+              12:             TypePointer Input 11(ivec3)
+13(gl_LocalInvocationID):     12(ptr) Variable Input
+              14:      8(int) Constant 0
+              15:             TypePointer Input 8(int)
+19(gl_WorkGroupID):     12(ptr) Variable Input
+              22:             TypePointer Function 11(ivec3)
+24(gl_NumWorkGroups):     12(ptr) Variable Input
+              27:      8(int) Constant 81
+              29:      8(int) Constant 32
+              32:             TypeFloat 32
+              33:             TypeVector 32(float) 4
+              34:      8(int) Constant 4
+              35:             TypeArray 32(float) 34
+              36:      8(int) Constant 3
+              37:             TypeArray 32(float) 36
+38(gl_MeshPerVertexEXT):             TypeStruct 33(fvec4) 32(float) 35 37
+              39:             TypeArray 38(gl_MeshPerVertexEXT) 27
+              40:             TypePointer Output 39
+41(gl_MeshVerticesEXT):     40(ptr) Variable Output
+              43:             TypeInt 32 1
+              44:     43(int) Constant 0
+              45:   32(float) Constant 1065353216
+              46:   33(fvec4) ConstantComposite 45 45 45 45
+              47:             TypePointer Output 33(fvec4)
+              50:     43(int) Constant 1
+              51:   32(float) Constant 1073741824
+              52:             TypePointer Output 32(float)
+              55:     43(int) Constant 2
+              56:     43(int) Constant 3
+              57:   32(float) Constant 1077936128
+              60:   32(float) Constant 1082130432
+              62:      8(int) Constant 1
+              63:      8(int) Constant 264
+              64:      8(int) Constant 2
+              89:             TypeBool
+90(gl_MeshPerPrimitiveEXT):             TypeStruct 43(int) 43(int) 43(int) 89(bool) 43(int)
+              91:             TypeArray 90(gl_MeshPerPrimitiveEXT) 29
+              92:             TypePointer Output 91
+93(gl_MeshPrimitivesEXT):     92(ptr) Variable Output
+              95:     43(int) Constant 6
+              96:             TypePointer Output 43(int)
+              99:     43(int) Constant 7
+             102:     43(int) Constant 8
+             105:    89(bool) ConstantFalse
+             106:             TypePointer Output 89(bool)
+             132:      8(int) Constant 96
+             133:             TypeArray 11(ivec3) 132
+             134:             TypePointer Output 133
+135(gl_PrimitiveTriangleIndicesEXT):    134(ptr) Variable Output
+             136:      8(int) Constant 257
+             137:   11(ivec3) ConstantComposite 136 136 136
+             138:             TypePointer Output 11(ivec3)
+             142:   11(ivec3) ConstantComposite 64 64 64
+             150:             TypePointer Function 43(int)
+             152:             TypePointer Input 43(int)
+153(gl_DrawIDARB):    152(ptr) Variable Input
+156(gl_ViewIndex):    152(ptr) Variable Input
+             158:   11(ivec3) ConstantComposite 29 62 62
+         4(main):           2 Function None 3
+               5:             Label
+         10(iid):      9(ptr) Variable Function
+         18(gid):      9(ptr) Variable Function
+23(numWorkGrous):     22(ptr) Variable Function
+ 26(vertexCount):      9(ptr) Variable Function
+28(primitiveCount):      9(ptr) Variable Function
+              16:     15(ptr) AccessChain 13(gl_LocalInvocationID) 14
+              17:      8(int) Load 16
+                              Store 10(iid) 17
+              20:     15(ptr) AccessChain 19(gl_WorkGroupID) 14
+              21:      8(int) Load 20
+                              Store 18(gid) 21
+              25:   11(ivec3) Load 24(gl_NumWorkGroups)
+                              Store 23(numWorkGrous) 25
+                              Store 26(vertexCount) 27
+                              Store 28(primitiveCount) 29
+              30:      8(int) Load 26(vertexCount)
+              31:      8(int) Load 28(primitiveCount)
+                              SetMeshOutputsEXT 30 31
+              42:      8(int) Load 10(iid)
+              48:     47(ptr) AccessChain 41(gl_MeshVerticesEXT) 42 44
+                              Store 48 46
+              49:      8(int) Load 10(iid)
+              53:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 49 50
+                              Store 53 51
+              54:      8(int) Load 10(iid)
+              58:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 54 55 56
+                              Store 58 57
+              59:      8(int) Load 10(iid)
+              61:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 59 56 55
+                              Store 61 60
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+              65:      8(int) Load 10(iid)
+              66:      8(int) IAdd 65 62
+              67:      8(int) Load 10(iid)
+              68:     47(ptr) AccessChain 41(gl_MeshVerticesEXT) 67 44
+              69:   33(fvec4) Load 68
+              70:     47(ptr) AccessChain 41(gl_MeshVerticesEXT) 66 44
+                              Store 70 69
+              71:      8(int) Load 10(iid)
+              72:      8(int) IAdd 71 62
+              73:      8(int) Load 10(iid)
+              74:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 73 50
+              75:   32(float) Load 74
+              76:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 72 50
+                              Store 76 75
+              77:      8(int) Load 10(iid)
+              78:      8(int) IAdd 77 62
+              79:      8(int) Load 10(iid)
+              80:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 79 55 56
+              81:   32(float) Load 80
+              82:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 78 55 56
+                              Store 82 81
+              83:      8(int) Load 10(iid)
+              84:      8(int) IAdd 83 62
+              85:      8(int) Load 10(iid)
+              86:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 85 56 55
+              87:   32(float) Load 86
+              88:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 84 56 55
+                              Store 88 87
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+              94:      8(int) Load 10(iid)
+              97:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 94 44
+                              Store 97 95
+              98:      8(int) Load 10(iid)
+             100:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 98 50
+                              Store 100 99
+             101:      8(int) Load 10(iid)
+             103:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 101 55
+                              Store 103 102
+             104:      8(int) Load 10(iid)
+             107:    106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 104 56
+                              Store 107 105
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+             108:      8(int) Load 10(iid)
+             109:      8(int) IAdd 108 62
+             110:      8(int) Load 10(iid)
+             111:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 110 44
+             112:     43(int) Load 111
+             113:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 109 44
+                              Store 113 112
+             114:      8(int) Load 10(iid)
+             115:      8(int) IAdd 114 62
+             116:      8(int) Load 10(iid)
+             117:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 116 50
+             118:     43(int) Load 117
+             119:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 115 50
+                              Store 119 118
+             120:      8(int) Load 10(iid)
+             121:      8(int) IAdd 120 62
+             122:      8(int) Load 10(iid)
+             123:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 122 55
+             124:     43(int) Load 123
+             125:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 121 55
+                              Store 125 124
+             126:      8(int) Load 10(iid)
+             127:      8(int) IAdd 126 62
+             128:      8(int) Load 10(iid)
+             129:    106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 128 56
+             130:    89(bool) Load 129
+             131:    106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 127 56
+                              Store 131 130
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+             139:    138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 44
+                              Store 139 137
+             140:      8(int) Load 28(primitiveCount)
+             141:      8(int) ISub 140 62
+             143:    138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 141
+                              Store 143 142
+             144:      8(int) Load 18(gid)
+             145:      8(int) Load 18(gid)
+             146:      8(int) ISub 145 62
+             147:    138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 146
+             148:   11(ivec3) Load 147
+             149:    138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 144
+                              Store 149 148
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+                              Return
+                              FunctionEnd
+6(testAdditionalBuiltins():           2 Function None 3
+               7:             Label
+         151(id):    150(ptr) Variable Function
+    155(viewIdx):    150(ptr) Variable Function
+             154:     43(int) Load 153(gl_DrawIDARB)
+                              Store 151(id) 154
+             157:     43(int) Load 156(gl_ViewIndex)
+                              Store 155(viewIdx) 157
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out
new file mode 100644
index 0000000..a331a47
--- /dev/null
+++ b/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out
@@ -0,0 +1,216 @@
+spv.ext.meshShaderRedeclBuiltins.mesh
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 128
+
+                              Capability ClipDistance
+                              Capability CullDistance
+                              Capability FragmentShadingRateKHR
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+                              Extension  "SPV_KHR_fragment_shading_rate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 11 17 29 81 122
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputPoints
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 26  "gl_MeshPerVertexEXT"
+                              MemberName 26(gl_MeshPerVertexEXT) 0  "gl_Position"
+                              MemberName 26(gl_MeshPerVertexEXT) 1  "gl_PointSize"
+                              MemberName 26(gl_MeshPerVertexEXT) 2  "gl_ClipDistance"
+                              MemberName 26(gl_MeshPerVertexEXT) 3  "gl_CullDistance"
+                              Name 29  "gl_MeshVerticesEXT"
+                              Name 78  "gl_MeshPerPrimitiveEXT"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 0  "gl_PrimitiveID"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 1  "gl_Layer"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 2  "gl_ViewportIndex"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 3  "gl_CullPrimitiveEXT"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 4  "gl_PrimitiveShadingRateEXT"
+                              Name 81  "gl_MeshPrimitivesEXT"
+                              Name 122  "gl_PrimitivePointIndicesEXT"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              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
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR
+                              Decorate 78(gl_MeshPerPrimitiveEXT) Block
+                              Decorate 122(gl_PrimitivePointIndicesEXT) BuiltIn PrimitivePointIndicesEXT
+                              Decorate 127 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              20:      6(int) Constant 81
+              21:      6(int) Constant 32
+              22:             TypeFloat 32
+              23:             TypeVector 22(float) 4
+              24:      6(int) Constant 4
+              25:             TypeArray 22(float) 24
+26(gl_MeshPerVertexEXT):             TypeStruct 23(fvec4) 22(float) 25 25
+              27:             TypeArray 26(gl_MeshPerVertexEXT) 20
+              28:             TypePointer Output 27
+29(gl_MeshVerticesEXT):     28(ptr) Variable Output
+              31:             TypeInt 32 1
+              32:     31(int) Constant 0
+              33:   22(float) Constant 1065353216
+              34:   23(fvec4) ConstantComposite 33 33 33 33
+              35:             TypePointer Output 23(fvec4)
+              38:     31(int) Constant 1
+              39:   22(float) Constant 1073741824
+              40:             TypePointer Output 22(float)
+              43:     31(int) Constant 2
+              44:     31(int) Constant 3
+              45:   22(float) Constant 1077936128
+              48:   22(float) Constant 1082130432
+              50:      6(int) Constant 1
+              51:      6(int) Constant 264
+              52:      6(int) Constant 2
+              77:             TypeBool
+78(gl_MeshPerPrimitiveEXT):             TypeStruct 31(int) 31(int) 31(int) 77(bool) 31(int)
+              79:             TypeArray 78(gl_MeshPerPrimitiveEXT) 21
+              80:             TypePointer Output 79
+81(gl_MeshPrimitivesEXT):     80(ptr) Variable Output
+              83:     31(int) Constant 6
+              84:             TypePointer Output 31(int)
+              87:     31(int) Constant 7
+              90:     31(int) Constant 8
+              93:    77(bool) ConstantFalse
+              94:             TypePointer Output 77(bool)
+             120:             TypeArray 6(int) 21
+             121:             TypePointer Output 120
+122(gl_PrimitivePointIndicesEXT):    121(ptr) Variable Output
+             123:             TypePointer Output 6(int)
+             125:     31(int) Constant 31
+             127:    9(ivec3) ConstantComposite 21 50 50
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+                              SetMeshOutputsEXT 20 21
+              30:      6(int) Load 8(iid)
+              36:     35(ptr) AccessChain 29(gl_MeshVerticesEXT) 30 32
+                              Store 36 34
+              37:      6(int) Load 8(iid)
+              41:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 37 38
+                              Store 41 39
+              42:      6(int) Load 8(iid)
+              46:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 42 43 44
+                              Store 46 45
+              47:      6(int) Load 8(iid)
+              49:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 47 44 43
+                              Store 49 48
+                              MemoryBarrier 50 51
+                              ControlBarrier 52 52 51
+              53:      6(int) Load 8(iid)
+              54:      6(int) IAdd 53 50
+              55:      6(int) Load 8(iid)
+              56:     35(ptr) AccessChain 29(gl_MeshVerticesEXT) 55 32
+              57:   23(fvec4) Load 56
+              58:     35(ptr) AccessChain 29(gl_MeshVerticesEXT) 54 32
+                              Store 58 57
+              59:      6(int) Load 8(iid)
+              60:      6(int) IAdd 59 50
+              61:      6(int) Load 8(iid)
+              62:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 61 38
+              63:   22(float) Load 62
+              64:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 60 38
+                              Store 64 63
+              65:      6(int) Load 8(iid)
+              66:      6(int) IAdd 65 50
+              67:      6(int) Load 8(iid)
+              68:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 67 43 44
+              69:   22(float) Load 68
+              70:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 66 43 44
+                              Store 70 69
+              71:      6(int) Load 8(iid)
+              72:      6(int) IAdd 71 50
+              73:      6(int) Load 8(iid)
+              74:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 73 44 43
+              75:   22(float) Load 74
+              76:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 72 44 43
+                              Store 76 75
+                              MemoryBarrier 50 51
+                              ControlBarrier 52 52 51
+              82:      6(int) Load 8(iid)
+              85:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 82 32
+                              Store 85 83
+              86:      6(int) Load 8(iid)
+              88:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 86 38
+                              Store 88 87
+              89:      6(int) Load 8(iid)
+              91:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 89 43
+                              Store 91 90
+              92:      6(int) Load 8(iid)
+              95:     94(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 92 44
+                              Store 95 93
+                              MemoryBarrier 50 51
+                              ControlBarrier 52 52 51
+              96:      6(int) Load 8(iid)
+              97:      6(int) IAdd 96 50
+              98:      6(int) Load 8(iid)
+              99:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 98 32
+             100:     31(int) Load 99
+             101:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 97 32
+                              Store 101 100
+             102:      6(int) Load 8(iid)
+             103:      6(int) IAdd 102 50
+             104:      6(int) Load 8(iid)
+             105:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 104 38
+             106:     31(int) Load 105
+             107:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 103 38
+                              Store 107 106
+             108:      6(int) Load 8(iid)
+             109:      6(int) IAdd 108 50
+             110:      6(int) Load 8(iid)
+             111:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 110 43
+             112:     31(int) Load 111
+             113:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 109 43
+                              Store 113 112
+             114:      6(int) Load 8(iid)
+             115:      6(int) IAdd 114 50
+             116:      6(int) Load 8(iid)
+             117:     94(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 116 44
+             118:    77(bool) Load 117
+             119:     94(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 115 44
+                              Store 119 118
+                              MemoryBarrier 50 51
+                              ControlBarrier 52 52 51
+             124:    123(ptr) AccessChain 122(gl_PrimitivePointIndicesEXT) 32
+                              Store 124 50
+             126:    123(ptr) AccessChain 122(gl_PrimitivePointIndicesEXT) 125
+                              Store 126 52
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out
new file mode 100644
index 0000000..b206177
--- /dev/null
+++ b/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out
@@ -0,0 +1,102 @@
+spv.ext.meshShaderTaskMem.mesh
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 58
+
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 11 22 30 38
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 18  "outBlock"
+                              MemberName 18(outBlock) 0  "gid5"
+                              MemberName 18(outBlock) 1  "gid6"
+                              Name 22  "myblk"
+                              Name 28  "taskBlock"
+                              MemberName 28(taskBlock) 0  "gid1"
+                              MemberName 28(taskBlock) 1  "gid2"
+                              Name 30  "mytask"
+                              Name 36  "bufferBlock"
+                              MemberName 36(bufferBlock) 0  "gid3"
+                              MemberName 36(bufferBlock) 1  "gid4"
+                              Name 38  "mybuf"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 18(outBlock) Block
+                              Decorate 22(myblk) Location 0
+                              Decorate 35 ArrayStride 4
+                              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 57 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+    18(outBlock):             TypeStruct 16(float) 17(fvec4)
+              19:      6(int) Constant 81
+              20:             TypeArray 18(outBlock) 19
+              21:             TypePointer Output 20
+       22(myblk):     21(ptr) Variable Output
+              24:             TypeInt 32 1
+              25:     24(int) Constant 0
+              26:      6(int) Constant 2
+              27:             TypeArray 16(float) 26
+   28(taskBlock):             TypeStruct 27 17(fvec4)
+              29:             TypePointer TaskPayloadWorkgroupEXT 28(taskBlock)
+      30(mytask):     29(ptr) Variable TaskPayloadWorkgroupEXT
+              31:     24(int) Constant 1
+              32:             TypePointer TaskPayloadWorkgroupEXT 16(float)
+              35:             TypeArray 16(float) 26
+ 36(bufferBlock):             TypeStruct 35 17(fvec4)
+              37:             TypePointer StorageBuffer 36(bufferBlock)
+       38(mybuf):     37(ptr) Variable StorageBuffer
+              39:             TypePointer StorageBuffer 16(float)
+              43:             TypePointer Output 16(float)
+              46:             TypePointer TaskPayloadWorkgroupEXT 17(fvec4)
+              49:             TypePointer StorageBuffer 17(fvec4)
+              53:             TypePointer Output 17(fvec4)
+              55:      6(int) Constant 32
+              56:      6(int) Constant 1
+              57:    9(ivec3) ConstantComposite 55 56 56
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              23:      6(int) Load 8(iid)
+              33:     32(ptr) AccessChain 30(mytask) 25 31
+              34:   16(float) Load 33
+              40:     39(ptr) AccessChain 38(mybuf) 25 31
+              41:   16(float) Load 40
+              42:   16(float) FAdd 34 41
+              44:     43(ptr) AccessChain 22(myblk) 23 25
+                              Store 44 42
+              45:      6(int) Load 8(iid)
+              47:     46(ptr) AccessChain 30(mytask) 31
+              48:   17(fvec4) Load 47
+              50:     49(ptr) AccessChain 38(mybuf) 31
+              51:   17(fvec4) Load 50
+              52:   17(fvec4) FAdd 48 51
+              54:     53(ptr) AccessChain 22(myblk) 45 31
+                              Store 54 52
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out
new file mode 100644
index 0000000..dc347aa
--- /dev/null
+++ b/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out
@@ -0,0 +1,208 @@
+spv.ext.meshShaderUserDefined.mesh
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 141
+
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 11 17 34 104
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 30  "myblock"
+                              MemberName 30(myblock) 0  "f"
+                              MemberName 30(myblock) 1  "fArr"
+                              MemberName 30(myblock) 2  "pos"
+                              MemberName 30(myblock) 3  "posArr"
+                              MemberName 30(myblock) 4  "m"
+                              MemberName 30(myblock) 5  "mArr"
+                              Name 34  "blk"
+                              Name 100  "myblock2"
+                              MemberName 100(myblock2) 0  "f"
+                              MemberName 100(myblock2) 1  "pos"
+                              MemberName 100(myblock2) 2  "m"
+                              Name 104  "blk2"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              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
+                              Decorate 140 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              20:             TypeFloat 32
+              21:      6(int) Constant 4
+              22:             TypeArray 20(float) 21
+              23:             TypeVector 20(float) 3
+              24:             TypeVector 20(float) 4
+              25:             TypeArray 24(fvec4) 21
+              26:             TypeMatrix 24(fvec4) 4
+              27:             TypeMatrix 23(fvec3) 3
+              28:      6(int) Constant 2
+              29:             TypeArray 27 28
+     30(myblock):             TypeStruct 20(float) 22 23(fvec3) 25 26 29
+              31:      6(int) Constant 32
+              32:             TypeArray 30(myblock) 31
+              33:             TypePointer Output 32
+         34(blk):     33(ptr) Variable Output
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:   20(float) Constant 1093664768
+              39:             TypePointer Output 20(float)
+              42:      6(int) Constant 1
+              44:     36(int) Constant 1
+              52:     36(int) Constant 2
+              53:   20(float) Constant 1096810496
+              54:   20(float) Constant 1097859072
+              55:   20(float) Constant 1095761920
+              56:   23(fvec3) ConstantComposite 53 54 55
+              57:             TypePointer Output 23(fvec3)
+              63:     36(int) Constant 3
+              72:      6(int) Constant 3
+              77:     36(int) Constant 4
+              78:   20(float) Constant 1098907648
+              79:   24(fvec4) ConstantComposite 55 53 54 78
+              80:             TypePointer Output 24(fvec4)
+              85:     36(int) Constant 5
+              94:   20(float) Constant 1099431936
+              95:   20(float) Constant 1099956224
+              96:   20(float) Constant 1100480512
+              97:   23(fvec3) ConstantComposite 94 95 96
+              99:      6(int) Constant 264
+   100(myblock2):             TypeStruct 20(float) 24(fvec4) 26
+             101:      6(int) Constant 81
+             102:             TypeArray 100(myblock2) 101
+             103:             TypePointer Output 102
+       104(blk2):    103(ptr) Variable Output
+             110:   20(float) Constant 1101004800
+             114:   20(float) Constant 1101529088
+             115:   20(float) Constant 1102053376
+             116:   20(float) Constant 1102577664
+             117:   20(float) Constant 1103101952
+             118:   24(fvec4) ConstantComposite 114 115 116 117
+             130:   20(float) Constant 1105723392
+             140:    9(ivec3) ConstantComposite 31 42 42
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+              35:      6(int) Load 8(iid)
+              40:     39(ptr) AccessChain 34(blk) 35 37
+                              Store 40 38
+              41:      6(int) Load 8(iid)
+              43:      6(int) IAdd 41 42
+              45:      6(int) Load 16(gid)
+              46:      6(int) Load 8(iid)
+              47:     39(ptr) AccessChain 34(blk) 46 37
+              48:   20(float) Load 47
+              49:     39(ptr) AccessChain 34(blk) 43 44 45
+                              Store 49 48
+              50:      6(int) Load 8(iid)
+              51:      6(int) UDiv 50 28
+              58:     57(ptr) AccessChain 34(blk) 51 52
+              59:   23(fvec3) Load 58
+              60:   23(fvec3) VectorShuffle 59 56 5 3 4
+                              Store 58 60
+              61:      6(int) Load 8(iid)
+              62:      6(int) IMul 61 28
+              64:      6(int) Load 8(iid)
+              65:      6(int) UDiv 64 28
+              66:     57(ptr) AccessChain 34(blk) 65 52
+              67:   23(fvec3) Load 66
+              68:     39(ptr) AccessChain 34(blk) 62 63 44 42
+              69:   20(float) CompositeExtract 67 0
+                              Store 68 69
+              70:     39(ptr) AccessChain 34(blk) 62 63 44 28
+              71:   20(float) CompositeExtract 67 1
+                              Store 70 71
+              73:     39(ptr) AccessChain 34(blk) 62 63 44 72
+              74:   20(float) CompositeExtract 67 2
+                              Store 73 74
+              75:      6(int) Load 8(iid)
+              76:      6(int) UDiv 75 21
+              81:     80(ptr) AccessChain 34(blk) 76 77 52
+              82:   24(fvec4) Load 81
+              83:   24(fvec4) VectorShuffle 82 79 7 6 5 4
+                              Store 81 83
+              84:      6(int) Load 8(iid)
+              86:      6(int) Load 8(iid)
+              87:      6(int) UDiv 86 21
+              88:     39(ptr) AccessChain 34(blk) 87 77 52 72
+              89:   20(float) Load 88
+              90:     39(ptr) AccessChain 34(blk) 84 85 37 44 42
+                              Store 90 89
+              91:      6(int) Load 8(iid)
+              92:      6(int) IMul 91 21
+              93:      6(int) Load 16(gid)
+              98:     57(ptr) AccessChain 34(blk) 92 85 44 93
+                              Store 98 97
+                              MemoryBarrier 42 99
+                              ControlBarrier 28 28 99
+             105:      6(int) Load 8(iid)
+             106:      6(int) Load 8(iid)
+             107:      6(int) ISub 106 42
+             108:     39(ptr) AccessChain 104(blk2) 107 37
+             109:   20(float) Load 108
+             111:   20(float) FAdd 109 110
+             112:     39(ptr) AccessChain 104(blk2) 105 37
+                              Store 112 111
+             113:      6(int) Load 8(iid)
+             119:     80(ptr) AccessChain 104(blk2) 113 44
+                              Store 119 118
+             120:      6(int) Load 8(iid)
+             121:      6(int) IAdd 120 42
+             122:      6(int) Load 16(gid)
+             123:      6(int) Load 8(iid)
+             124:     80(ptr) AccessChain 104(blk2) 123 44
+             125:   24(fvec4) Load 124
+             126:     80(ptr) AccessChain 104(blk2) 121 52 122
+                              Store 126 125
+             127:      6(int) Load 8(iid)
+             128:      6(int) IAdd 127 42
+             129:      6(int) Load 16(gid)
+             131:     39(ptr) AccessChain 104(blk2) 128 52 129 28
+                              Store 131 130
+             132:      6(int) Load 8(iid)
+             133:      6(int) IAdd 132 28
+             134:      6(int) Load 8(iid)
+             135:      6(int) IAdd 134 42
+             136:      6(int) Load 16(gid)
+             137:     80(ptr) AccessChain 104(blk2) 135 52 136
+             138:   24(fvec4) Load 137
+             139:     80(ptr) AccessChain 104(blk2) 133 52 63
+                              Store 139 138
+                              MemoryBarrier 42 99
+                              ControlBarrier 28 28 99
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.meshTaskShader.task.out b/Test/baseResults/spv.ext.meshTaskShader.task.out
new file mode 100644
index 0000000..41a81d0
--- /dev/null
+++ b/Test/baseResults/spv.ext.meshTaskShader.task.out
@@ -0,0 +1,162 @@
+spv.ext.meshTaskShader.task
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 103
+
+                              Capability StorageImageWriteWithoutFormat
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TaskEXT 4  "main" 11 17 34 39 55 80
+                              ExecutionMode 4 LocalSize 32 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 20  "i"
+                              Name 34  "mem"
+                              Name 37  "block0"
+                              MemberName 37(block0) 0  "uni_value"
+                              Name 39  ""
+                              Name 55  "uni_image"
+                              Name 78  "Task"
+                              MemberName 78(Task) 0  "dummy"
+                              MemberName 78(Task) 1  "submesh"
+                              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
+                              Decorate 39 Binding 1
+                              Decorate 55(uni_image) DescriptorSet 0
+                              Decorate 55(uni_image) Binding 0
+                              Decorate 55(uni_image) NonReadable
+                              Decorate 102 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              27:      6(int) Constant 10
+              28:             TypeBool
+              30:             TypeFloat 32
+              31:             TypeVector 30(float) 4
+              32:             TypeArray 31(fvec4) 27
+              33:             TypePointer Workgroup 32
+         34(mem):     33(ptr) Variable Workgroup
+      37(block0):             TypeStruct 6(int)
+              38:             TypePointer Uniform 37(block0)
+              39:     38(ptr) Variable Uniform
+              40:             TypeInt 32 1
+              41:     40(int) Constant 0
+              42:             TypePointer Uniform 6(int)
+              48:             TypePointer Workgroup 31(fvec4)
+              51:     40(int) Constant 1
+              53:             TypeImage 30(float) 2D nonsampled format:Unknown
+              54:             TypePointer UniformConstant 53
+   55(uni_image):     54(ptr) Variable UniformConstant
+              59:             TypeVector 40(int) 2
+              69:      6(int) Constant 1
+              73:      6(int) Constant 264
+              74:      6(int) Constant 2
+              75:             TypeVector 30(float) 2
+              76:      6(int) Constant 3
+              77:             TypeArray 75(fvec2) 76
+        78(Task):             TypeStruct 75(fvec2) 77
+              79:             TypePointer TaskPayloadWorkgroupEXT 78(Task)
+      80(mytask):     79(ptr) Variable TaskPayloadWorkgroupEXT
+              81:   30(float) Constant 1106247680
+              82:   30(float) Constant 1106771968
+              83:   75(fvec2) ConstantComposite 81 82
+              84:             TypePointer TaskPayloadWorkgroupEXT 75(fvec2)
+              86:   30(float) Constant 1107296256
+              87:   30(float) Constant 1107558400
+              88:   75(fvec2) ConstantComposite 86 87
+              90:   30(float) Constant 1107820544
+              91:   30(float) Constant 1108082688
+              92:   75(fvec2) ConstantComposite 90 91
+              94:     40(int) Constant 2
+             101:      6(int) Constant 32
+             102:    9(ivec3) ConstantComposite 101 69 69
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+           20(i):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+                              Store 20(i) 12
+                              Branch 21
+              21:             Label
+                              LoopMerge 23 24 None
+                              Branch 25
+              25:             Label
+              26:      6(int) Load 20(i)
+              29:    28(bool) ULessThan 26 27
+                              BranchConditional 29 22 23
+              22:               Label
+              35:      6(int)   Load 20(i)
+              36:      6(int)   Load 20(i)
+              43:     42(ptr)   AccessChain 39 41
+              44:      6(int)   Load 43
+              45:      6(int)   IAdd 36 44
+              46:   30(float)   ConvertUToF 45
+              47:   31(fvec4)   CompositeConstruct 46 46 46 46
+              49:     48(ptr)   AccessChain 34(mem) 35
+                                Store 49 47
+                                Branch 24
+              24:               Label
+              50:      6(int)   Load 20(i)
+              52:      6(int)   IAdd 50 51
+                                Store 20(i) 52
+                                Branch 21
+              23:             Label
+              56:          53 Load 55(uni_image)
+              57:      6(int) Load 8(iid)
+              58:     40(int) Bitcast 57
+              60:   59(ivec2) CompositeConstruct 58 58
+              61:      6(int) Load 16(gid)
+              62:     48(ptr) AccessChain 34(mem) 61
+              63:   31(fvec4) Load 62
+                              ImageWrite 56 60 63
+              64:          53 Load 55(uni_image)
+              65:      6(int) Load 8(iid)
+              66:     40(int) Bitcast 65
+              67:   59(ivec2) CompositeConstruct 66 66
+              68:      6(int) Load 16(gid)
+              70:      6(int) IAdd 68 69
+              71:     48(ptr) AccessChain 34(mem) 70
+              72:   31(fvec4) Load 71
+                              ImageWrite 64 67 72
+                              MemoryBarrier 69 73
+                              ControlBarrier 74 74 73
+              85:     84(ptr) AccessChain 80(mytask) 41
+                              Store 85 83
+              89:     84(ptr) AccessChain 80(mytask) 51 41
+                              Store 89 88
+              93:     84(ptr) AccessChain 80(mytask) 51 51
+                              Store 93 92
+              95:      6(int) Load 16(gid)
+              96:      6(int) UMod 95 74
+              97:     84(ptr) AccessChain 80(mytask) 51 96
+              98:   75(fvec2) Load 97
+              99:     84(ptr) AccessChain 80(mytask) 51 94
+                              Store 99 98
+                              MemoryBarrier 69 73
+                              ControlBarrier 74 74 73
+                              EmitMeshTasksEXT 76 69 69 80(mytask)
+                              FunctionEnd
diff --git a/Test/baseResults/spv.extPostDepthCoverage.frag.out b/Test/baseResults/spv.extPostDepthCoverage.frag.out
index cc96fb4..7e4c6f5 100644
--- a/Test/baseResults/spv.extPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.extPostDepthCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.extPostDepthCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out
index 8c33a66..2cce815 100644
--- a/Test/baseResults/spv.float16.frag.out
+++ b/Test/baseResults/spv.float16.frag.out
@@ -1,7 +1,7 @@
 spv.float16.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 542
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out
index da4aa4d..17eb5b3 100644
--- a/Test/baseResults/spv.float16Fetch.frag.out
+++ b/Test/baseResults/spv.float16Fetch.frag.out
@@ -1,7 +1,7 @@
 spv.float16Fetch.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 5979
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16NoRelaxed.vert.out b/Test/baseResults/spv.float16NoRelaxed.vert.out
new file mode 100644
index 0000000..9e821ab
--- /dev/null
+++ b/Test/baseResults/spv.float16NoRelaxed.vert.out
@@ -0,0 +1,72 @@
+spv.float16NoRelaxed.vert
+// Module Version 10300
+// Generated by (magic number): 8000b
+// Id's are bound by 35
+
+                              Capability Shader
+                              Capability Float16
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 11 30
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_vote"
+                              Name 4  "main"
+                              Name 8  "valueNoEqual"
+                              Name 11  "gl_SubgroupInvocationID"
+                              Name 15  "tempRes"
+                              Name 26  "Buffer1"
+                              MemberName 26(Buffer1) 0  "result"
+                              Name 28  ""
+                              Name 30  "gl_VertexIndex"
+                              Decorate 11(gl_SubgroupInvocationID) RelaxedPrecision
+                              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
+                              Decorate 28 Binding 0
+                              Decorate 30(gl_VertexIndex) BuiltIn VertexIndex
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:             TypePointer Function 6(float16_t)
+               9:             TypeInt 32 0
+              10:             TypePointer Input 9(int)
+11(gl_SubgroupInvocationID):     10(ptr) Variable Input
+              14:             TypePointer Function 9(int)
+              17:             TypeBool
+              18:      9(int) Constant 3
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:     20(int) Constant 16
+              25:             TypeRuntimeArray 9(int)
+     26(Buffer1):             TypeStruct 25
+              27:             TypePointer StorageBuffer 26(Buffer1)
+              28:     27(ptr) Variable StorageBuffer
+              29:             TypePointer Input 20(int)
+30(gl_VertexIndex):     29(ptr) Variable Input
+              33:             TypePointer StorageBuffer 9(int)
+         4(main):           2 Function None 3
+               5:             Label
+ 8(valueNoEqual):      7(ptr) Variable Function
+     15(tempRes):     14(ptr) Variable Function
+              12:      9(int) Load 11(gl_SubgroupInvocationID)
+              13:6(float16_t) ConvertUToF 12
+                              Store 8(valueNoEqual) 13
+              16:6(float16_t) Load 8(valueNoEqual)
+              19:    17(bool) GroupNonUniformAllEqual 18 16
+              23:     20(int) Select 19 21 22
+              24:      9(int) Bitcast 23
+                              Store 15(tempRes) 24
+              31:     20(int) Load 30(gl_VertexIndex)
+              32:      9(int) Load 15(tempRes)
+              34:     33(ptr) AccessChain 28 21 31
+                              Store 34 32
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.float16convertonlyarith.comp.out b/Test/baseResults/spv.float16convertonlyarith.comp.out
index 1666f79..81d1c60 100644
--- a/Test/baseResults/spv.float16convertonlyarith.comp.out
+++ b/Test/baseResults/spv.float16convertonlyarith.comp.out
@@ -1,6 +1,6 @@
 spv.float16convertonlyarith.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16convertonlystorage.comp.out b/Test/baseResults/spv.float16convertonlystorage.comp.out
index 8eb42f6..be15f43 100644
--- a/Test/baseResults/spv.float16convertonlystorage.comp.out
+++ b/Test/baseResults/spv.float16convertonlystorage.comp.out
@@ -1,6 +1,6 @@
 spv.float16convertonlystorage.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out
index 2ffa231..d2cc609 100644
--- a/Test/baseResults/spv.float32.frag.out
+++ b/Test/baseResults/spv.float32.frag.out
@@ -1,6 +1,6 @@
 spv.float32.frag
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 541
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
index cd5f80d..68e8f1c 100644
--- a/Test/baseResults/spv.float64.frag.out
+++ b/Test/baseResults/spv.float64.frag.out
@@ -1,7 +1,7 @@
 spv.float64.frag
 Validation failed
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 485
 
                               Capability Shader
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
index efbe63e..62f6ad7 100644
--- a/Test/baseResults/spv.flowControl.frag.out
+++ b/Test/baseResults/spv.flowControl.frag.out
@@ -1,6 +1,6 @@
 spv.flowControl.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-complex-condition.vert.out b/Test/baseResults/spv.for-complex-condition.vert.out
index ca971fd..16b23a0 100644
--- a/Test/baseResults/spv.for-complex-condition.vert.out
+++ b/Test/baseResults/spv.for-complex-condition.vert.out
@@ -1,6 +1,6 @@
 spv.for-complex-condition.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-continue-break.vert.out b/Test/baseResults/spv.for-continue-break.vert.out
index 4ba1cb9..10ab24e 100644
--- a/Test/baseResults/spv.for-continue-break.vert.out
+++ b/Test/baseResults/spv.for-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.for-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-nobody.vert.out b/Test/baseResults/spv.for-nobody.vert.out
index b965a58..7a0b6de 100644
--- a/Test/baseResults/spv.for-nobody.vert.out
+++ b/Test/baseResults/spv.for-nobody.vert.out
@@ -1,6 +1,6 @@
 spv.for-nobody.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-notest.vert.out b/Test/baseResults/spv.for-notest.vert.out
index d3e9603..b08c6a1 100644
--- a/Test/baseResults/spv.for-notest.vert.out
+++ b/Test/baseResults/spv.for-notest.vert.out
@@ -1,6 +1,6 @@
 spv.for-notest.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out
index c4de996..92f3083 100644
--- a/Test/baseResults/spv.for-simple.vert.out
+++ b/Test/baseResults/spv.for-simple.vert.out
@@ -1,6 +1,6 @@
 spv.for-simple.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out
index 3a36667..2a35961 100644
--- a/Test/baseResults/spv.forLoop.frag.out
+++ b/Test/baseResults/spv.forLoop.frag.out
@@ -1,6 +1,6 @@
 spv.forLoop.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 143
 
                               Capability Shader
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
index f166286..77f3941 100644
--- a/Test/baseResults/spv.forwardFun.frag.out
+++ b/Test/baseResults/spv.forwardFun.frag.out
@@ -1,6 +1,6 @@
 spv.forwardFun.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fragmentDensity-es.frag.out b/Test/baseResults/spv.fragmentDensity-es.frag.out
index 253ce2e..fb1407e 100644
--- a/Test/baseResults/spv.fragmentDensity-es.frag.out
+++ b/Test/baseResults/spv.fragmentDensity-es.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentDensity-es.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fragmentDensity.frag.out b/Test/baseResults/spv.fragmentDensity.frag.out
index 4c831f2..43261cd 100644
--- a/Test/baseResults/spv.fragmentDensity.frag.out
+++ b/Test/baseResults/spv.fragmentDensity.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentDensity.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
index 2ea8f35..29b290b 100644
--- a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
+++ b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
@@ -1,10 +1,10 @@
 spv.fragmentShaderBarycentric.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 43
 
                               Capability Shader
-                              Capability FragmentBarycentricNV
+                              Capability FragmentBarycentricKHR
                               Extension  "SPV_NV_fragment_shader_barycentric"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -19,10 +19,10 @@
                               MemberName 17(vertices) 0  "attrib"
                               Name 21  "v"
                               Decorate 8(value) Location 1
-                              Decorate 11(gl_BaryCoordNV) BuiltIn BaryCoordNV
+                              Decorate 11(gl_BaryCoordNV) BuiltIn BaryCoordKHR
                               Decorate 17(vertices) Block
                               Decorate 21(v) Location 0
-                              Decorate 21(v) PerVertexNV
+                              Decorate 21(v) PerVertexKHR
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
index 74a3498..18f0ca3 100644
--- a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
+++ b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
@@ -1,14 +1,14 @@
 spv.fragmentShaderBarycentric2.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
-// Id's are bound by 42
+// Generated by (magic number): 8000b
+// Id's are bound by 62
 
                               Capability Shader
-                              Capability FragmentBarycentricNV
+                              Capability FragmentBarycentricKHR
                               Extension  "SPV_NV_fragment_shader_barycentric"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 8 11 20
+                              EntryPoint Fragment 4  "main" 8 11 20 44
                               ExecutionMode 4 OriginUpperLeft
                               Source ESSL 320
                               SourceExtension  "GL_NV_fragment_shader_barycentric"
@@ -16,10 +16,13 @@
                               Name 8  "value"
                               Name 11  "gl_BaryCoordNoPerspNV"
                               Name 20  "vertexIDs"
+                              Name 44  "vertexIDs2"
                               Decorate 8(value) Location 1
-                              Decorate 11(gl_BaryCoordNoPerspNV) BuiltIn BaryCoordNoPerspNV
+                              Decorate 11(gl_BaryCoordNoPerspNV) BuiltIn BaryCoordNoPerspKHR
                               Decorate 20(vertexIDs) Location 0
-                              Decorate 20(vertexIDs) PerVertexNV
+                              Decorate 20(vertexIDs) PerVertexKHR
+                              Decorate 44(vertexIDs2) Location 1
+                              Decorate 44(vertexIDs2) PerVertexKHR
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -41,6 +44,7 @@
               29:     21(int) Constant 1
               34:     12(int) Constant 2
               37:     21(int) Constant 2
+  44(vertexIDs2):     19(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
               15:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 13
@@ -61,5 +65,25 @@
               40:    6(float) FMul 36 39
               41:    6(float) FAdd 33 40
                               Store 8(value) 41
+              42:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 13
+              43:    6(float) Load 42
+              45:     14(ptr) AccessChain 44(vertexIDs2) 22
+              46:    6(float) Load 45
+              47:    6(float) FMul 43 46
+              48:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 26
+              49:    6(float) Load 48
+              50:     14(ptr) AccessChain 44(vertexIDs2) 29
+              51:    6(float) Load 50
+              52:    6(float) FMul 49 51
+              53:    6(float) FAdd 47 52
+              54:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 34
+              55:    6(float) Load 54
+              56:     14(ptr) AccessChain 44(vertexIDs2) 37
+              57:    6(float) Load 56
+              58:    6(float) FMul 55 57
+              59:    6(float) FAdd 53 58
+              60:    6(float) Load 8(value)
+              61:    6(float) FAdd 60 59
+                              Store 8(value) 61
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric3.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric3.frag.out
new file mode 100644
index 0000000..60badf6
--- /dev/null
+++ b/Test/baseResults/spv.fragmentShaderBarycentric3.frag.out
@@ -0,0 +1,69 @@
+spv.fragmentShaderBarycentric3.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 43
+
+                              Capability Shader
+                              Capability FragmentBarycentricKHR
+                              Extension  "SPV_KHR_fragment_shader_barycentric"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 11 21
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_fragment_shader_barycentric"
+                              Name 4  "main"
+                              Name 8  "value"
+                              Name 11  "gl_BaryCoordEXT"
+                              Name 17  "vertices"
+                              MemberName 17(vertices) 0  "attrib"
+                              Name 21  "v"
+                              Decorate 8(value) Location 1
+                              Decorate 11(gl_BaryCoordEXT) BuiltIn BaryCoordKHR
+                              Decorate 17(vertices) Block
+                              Decorate 21(v) Location 0
+                              Decorate 21(v) PerVertexKHR
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Output 6(float)
+        8(value):      7(ptr) Variable Output
+               9:             TypeVector 6(float) 3
+              10:             TypePointer Input 9(fvec3)
+11(gl_BaryCoordEXT):     10(ptr) Variable Input
+              12:             TypeInt 32 0
+              13:     12(int) Constant 0
+              14:             TypePointer Input 6(float)
+    17(vertices):             TypeStruct 6(float)
+              18:     12(int) Constant 3
+              19:             TypeArray 17(vertices) 18
+              20:             TypePointer Input 19
+           21(v):     20(ptr) Variable Input
+              22:             TypeInt 32 1
+              23:     22(int) Constant 0
+              27:     12(int) Constant 1
+              30:     22(int) Constant 1
+              35:     12(int) Constant 2
+              38:     22(int) Constant 2
+         4(main):           2 Function None 3
+               5:             Label
+              15:     14(ptr) AccessChain 11(gl_BaryCoordEXT) 13
+              16:    6(float) Load 15
+              24:     14(ptr) AccessChain 21(v) 23 23
+              25:    6(float) Load 24
+              26:    6(float) FMul 16 25
+              28:     14(ptr) AccessChain 11(gl_BaryCoordEXT) 27
+              29:    6(float) Load 28
+              31:     14(ptr) AccessChain 21(v) 30 23
+              32:    6(float) Load 31
+              33:    6(float) FMul 29 32
+              34:    6(float) FAdd 26 33
+              36:     14(ptr) AccessChain 11(gl_BaryCoordEXT) 35
+              37:    6(float) Load 36
+              39:     14(ptr) AccessChain 21(v) 38 23
+              40:    6(float) Load 39
+              41:    6(float) FMul 37 40
+              42:    6(float) FAdd 34 41
+                              Store 8(value) 42
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric4.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric4.frag.out
new file mode 100644
index 0000000..fc0e576
--- /dev/null
+++ b/Test/baseResults/spv.fragmentShaderBarycentric4.frag.out
@@ -0,0 +1,89 @@
+spv.fragmentShaderBarycentric4.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 62
+
+                              Capability Shader
+                              Capability FragmentBarycentricKHR
+                              Extension  "SPV_KHR_fragment_shader_barycentric"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 11 20 44
+                              ExecutionMode 4 OriginUpperLeft
+                              Source ESSL 320
+                              SourceExtension  "GL_EXT_fragment_shader_barycentric"
+                              Name 4  "main"
+                              Name 8  "value"
+                              Name 11  "gl_BaryCoordNoPerspEXT"
+                              Name 20  "vertexIDs"
+                              Name 44  "vertexIDs2"
+                              Decorate 8(value) Location 1
+                              Decorate 11(gl_BaryCoordNoPerspEXT) BuiltIn BaryCoordNoPerspKHR
+                              Decorate 20(vertexIDs) Location 0
+                              Decorate 20(vertexIDs) PerVertexKHR
+                              Decorate 44(vertexIDs2) Location 1
+                              Decorate 44(vertexIDs2) PerVertexKHR
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Output 6(float)
+        8(value):      7(ptr) Variable Output
+               9:             TypeVector 6(float) 3
+              10:             TypePointer Input 9(fvec3)
+11(gl_BaryCoordNoPerspEXT):     10(ptr) Variable Input
+              12:             TypeInt 32 0
+              13:     12(int) Constant 0
+              14:             TypePointer Input 6(float)
+              17:     12(int) Constant 3
+              18:             TypeArray 6(float) 17
+              19:             TypePointer Input 18
+   20(vertexIDs):     19(ptr) Variable Input
+              21:             TypeInt 32 1
+              22:     21(int) Constant 0
+              26:     12(int) Constant 1
+              29:     21(int) Constant 1
+              34:     12(int) Constant 2
+              37:     21(int) Constant 2
+  44(vertexIDs2):     19(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              15:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 13
+              16:    6(float) Load 15
+              23:     14(ptr) AccessChain 20(vertexIDs) 22
+              24:    6(float) Load 23
+              25:    6(float) FMul 16 24
+              27:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 26
+              28:    6(float) Load 27
+              30:     14(ptr) AccessChain 20(vertexIDs) 29
+              31:    6(float) Load 30
+              32:    6(float) FMul 28 31
+              33:    6(float) FAdd 25 32
+              35:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 34
+              36:    6(float) Load 35
+              38:     14(ptr) AccessChain 20(vertexIDs) 37
+              39:    6(float) Load 38
+              40:    6(float) FMul 36 39
+              41:    6(float) FAdd 33 40
+                              Store 8(value) 41
+              42:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 13
+              43:    6(float) Load 42
+              45:     14(ptr) AccessChain 44(vertexIDs2) 22
+              46:    6(float) Load 45
+              47:    6(float) FMul 43 46
+              48:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 26
+              49:    6(float) Load 48
+              50:     14(ptr) AccessChain 44(vertexIDs2) 29
+              51:    6(float) Load 50
+              52:    6(float) FMul 49 51
+              53:    6(float) FAdd 47 52
+              54:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 34
+              55:    6(float) Load 54
+              56:     14(ptr) AccessChain 44(vertexIDs2) 37
+              57:    6(float) Load 56
+              58:    6(float) FMul 55 57
+              59:    6(float) FAdd 53 58
+              60:    6(float) Load 8(value)
+              61:    6(float) FAdd 60 59
+                              Store 8(value) 61
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.fsi.frag.out b/Test/baseResults/spv.fsi.frag.out
index 3e06aed..1b5fbf4 100644
--- a/Test/baseResults/spv.fsi.frag.out
+++ b/Test/baseResults/spv.fsi.frag.out
@@ -1,6 +1,6 @@
 spv.fsi.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fullyCovered.frag.out b/Test/baseResults/spv.fullyCovered.frag.out
index ae7b426..cd730a4 100644
--- a/Test/baseResults/spv.fullyCovered.frag.out
+++ b/Test/baseResults/spv.fullyCovered.frag.out
@@ -1,6 +1,6 @@
 spv.fullyCovered.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.funcall.array.frag.out b/Test/baseResults/spv.funcall.array.frag.out
index 616ba16..b4e2bfb 100644
--- a/Test/baseResults/spv.funcall.array.frag.out
+++ b/Test/baseResults/spv.funcall.array.frag.out
@@ -1,6 +1,6 @@
 spv.funcall.array.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
index 58b0461..52d167c 100644
--- a/Test/baseResults/spv.functionCall.frag.out
+++ b/Test/baseResults/spv.functionCall.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:5: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 76
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionNestedOpaque.vert.out b/Test/baseResults/spv.functionNestedOpaque.vert.out
index 96a64aa..5878760 100644
--- a/Test/baseResults/spv.functionNestedOpaque.vert.out
+++ b/Test/baseResults/spv.functionNestedOpaque.vert.out
@@ -1,7 +1,7 @@
 spv.functionNestedOpaque.vert
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionParameterTypes.frag.out b/Test/baseResults/spv.functionParameterTypes.frag.out
index 65a33da..19f5429 100644
--- a/Test/baseResults/spv.functionParameterTypes.frag.out
+++ b/Test/baseResults/spv.functionParameterTypes.frag.out
@@ -1,6 +1,6 @@
 spv.functionParameterTypes.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out
index f12aae0..dc8520d 100644
--- a/Test/baseResults/spv.functionSemantics.frag.out
+++ b/Test/baseResults/spv.functionSemantics.frag.out
@@ -1,6 +1,6 @@
 spv.functionSemantics.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 156
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out
index df39129..033769f 100644
--- a/Test/baseResults/spv.glFragColor.frag.out
+++ b/Test/baseResults/spv.glFragColor.frag.out
@@ -1,6 +1,6 @@
 spv.glFragColor.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 12
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glsl.register.autoassign.frag.out b/Test/baseResults/spv.glsl.register.autoassign.frag.out
index 01df400..041edb9 100644
--- a/Test/baseResults/spv.glsl.register.autoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.glsl.register.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 142
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glsl.register.noautoassign.frag.out b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
index e475a00..ccf6880 100644
--- a/Test/baseResults/spv.glsl.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
@@ -1,6 +1,6 @@
 spv.glsl.register.noautoassign.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 142
 
                               Capability Shader
diff --git a/Test/baseResults/spv.hlslDebugInfo.frag.out b/Test/baseResults/spv.hlslDebugInfo.frag.out
index 40089e7..d68c054 100644
--- a/Test/baseResults/spv.hlslDebugInfo.frag.out
+++ b/Test/baseResults/spv.hlslDebugInfo.frag.out
@@ -1,6 +1,6 @@
 spv.hlslDebugInfo.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 19
 
                               Capability Shader
@@ -44,6 +44,7 @@
               13:    8(fvec4) ConstantComposite 12 12 12 12
               16:             TypePointer Output 8(fvec4)
 17(@entryPointOutput):     16(ptr) Variable Output
+                              Line 1 2 1
       5(newMain):           3 Function None 4
                6:             Label
                               Line 1 2 0
@@ -51,6 +52,7 @@
                               Store 17(@entryPointOutput) 18
                               Return
                               FunctionEnd
+                              Line 1 2 1
    10(@newMain():    8(fvec4) Function None 9
               11:             Label
                               Line 1 3 0
diff --git a/Test/baseResults/spv.hlslOffsets.vert.out b/Test/baseResults/spv.hlslOffsets.vert.out
index cc71283..d2d6443 100644
--- a/Test/baseResults/spv.hlslOffsets.vert.out
+++ b/Test/baseResults/spv.hlslOffsets.vert.out
@@ -18,7 +18,7 @@
 0:?     'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 14
 
                               Capability Shader
diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out
index 5fbb922..f71a1cc 100644
--- a/Test/baseResults/spv.image.frag.out
+++ b/Test/baseResults/spv.image.frag.out
@@ -1,7 +1,7 @@
 spv.image.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 405
 
                               Capability Shader
diff --git a/Test/baseResults/spv.imageAtomic64.comp.out b/Test/baseResults/spv.imageAtomic64.comp.out
new file mode 100644
index 0000000..4317ae0
--- /dev/null
+++ b/Test/baseResults/spv.imageAtomic64.comp.out
@@ -0,0 +1,58 @@
+spv.imageAtomic64.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 28
+
+                              Capability Shader
+                              Capability Int64
+                              Capability Int64Atomics
+                              Capability Int64ImageEXT
+                              Extension  "SPV_EXT_shader_image_int64"
+               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_int64"
+                              SourceExtension  "GL_EXT_shader_image_int64"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              Name 4  "main"
+                              Name 9  "z"
+                              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 14(ssbo) BufferBlock
+                              Decorate 16 DescriptorSet 0
+                              Decorate 16 Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 64 0
+               7:             TypeImage 6(int64_t) 2D nonsampled format:R64ui
+               8:             TypePointer UniformConstant 7
+            9(z):      8(ptr) Variable UniformConstant
+              10:             TypeInt 32 1
+              11:             TypeVector 10(int) 2
+              12:     10(int) Constant 1
+              13:   11(ivec2) ConstantComposite 12 12
+        14(ssbo):             TypeStruct 6(int64_t)
+              15:             TypePointer Uniform 14(ssbo)
+              16:     15(ptr) Variable Uniform
+              17:     10(int) Constant 0
+              18:             TypePointer Uniform 6(int64_t)
+              21:     10(int) Constant 2048
+              22:             TypeInt 32 0
+              23:     22(int) Constant 0
+              24:             TypePointer Image 6(int64_t)
+              26:     22(int) Constant 1
+              27:     22(int) Constant 2048
+         4(main):           2 Function None 3
+               5:             Label
+              19:     18(ptr) AccessChain 16 17
+              20:  6(int64_t) Load 19
+              25:     24(ptr) ImageTexelPointer 9(z) 13 23
+                              AtomicStore 25 12 27 20
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.imageAtomic64.frag.out b/Test/baseResults/spv.imageAtomic64.frag.out
index 3083697..1c002ab 100644
--- a/Test/baseResults/spv.imageAtomic64.frag.out
+++ b/Test/baseResults/spv.imageAtomic64.frag.out
@@ -1,7 +1,7 @@
 spv.imageAtomic64.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 503
 
                               Capability Shader
diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out
index b809474..4a16d75 100644
--- a/Test/baseResults/spv.imageLoadStoreLod.frag.out
+++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -1,6 +1,6 @@
 spv.imageLoadStoreLod.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 148
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int16.amd.frag.out b/Test/baseResults/spv.int16.amd.frag.out
index 676d99c..53f5537 100644
--- a/Test/baseResults/spv.int16.amd.frag.out
+++ b/Test/baseResults/spv.int16.amd.frag.out
@@ -1,6 +1,6 @@
 spv.int16.amd.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 576
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index 3e10a7d..ed788f8 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -1,6 +1,6 @@
 spv.int16.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 549
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out
index af232ec..2c260dd 100644
--- a/Test/baseResults/spv.int32.frag.out
+++ b/Test/baseResults/spv.int32.frag.out
@@ -1,6 +1,6 @@
 spv.int32.frag
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 505
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index f2fd600..e335a54 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -1,7 +1,7 @@
 spv.int64.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 513
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out
index e9cd5f8..3bfeb1a 100644
--- a/Test/baseResults/spv.int8.frag.out
+++ b/Test/baseResults/spv.int8.frag.out
@@ -1,6 +1,6 @@
 spv.int8.frag
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 544
 
                               Capability Shader
diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out
index b57eac2..67b11d2 100644
--- a/Test/baseResults/spv.intOps.vert.out
+++ b/Test/baseResults/spv.intOps.vert.out
@@ -1,6 +1,6 @@
 spv.intOps.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 302
 
                               Capability Shader
diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out
index 6a69743..bc50255 100644
--- a/Test/baseResults/spv.intcoopmat.comp.out
+++ b/Test/baseResults/spv.intcoopmat.comp.out
@@ -1,6 +1,6 @@
 spv.intcoopmat.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 262
 
                               Capability Shader
diff --git a/Test/baseResults/spv.interpOps.frag.out b/Test/baseResults/spv.interpOps.frag.out
index 808c1cd..62bd2b6 100644
--- a/Test/baseResults/spv.interpOps.frag.out
+++ b/Test/baseResults/spv.interpOps.frag.out
@@ -1,6 +1,6 @@
 spv.interpOps.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 120
 
                               Capability Shader
diff --git a/Test/baseResults/spv.intrinsicsSpecConst.vert.out b/Test/baseResults/spv.intrinsicsSpecConst.vert.out
deleted file mode 100644
index 11751d6..0000000
--- a/Test/baseResults/spv.intrinsicsSpecConst.vert.out
+++ /dev/null
@@ -1,35 +0,0 @@
-spv.intrinsicsSpecConst.vert
-Validation failed
-// Module Version 10000
-// Generated by (magic number): 8000a
-// Id's are bound by 13
-
-                              Capability Shader
-               1:             ExtInstImport  "GLSL.std.450"
-                              MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 10
-                              ExecutionModeId 4 DenormFlushToZero 7
-                              Source GLSL 450
-                              SourceExtension  "GL_EXT_spirv_intrinsics"
-                              Name 4  "main"
-                              Name 7  "targetWidth"
-                              Name 10  "pointSize"
-                              Name 11  "builtIn"
-                              Decorate 7(targetWidth) SpecId 5
-                              Decorate 10(pointSize) Location 0
-                              Decorate 11(builtIn) SpecId 6
-                              DecorateId 10(pointSize) BuiltIn 11(builtIn)
-               2:             TypeVoid
-               3:             TypeFunction 2
-               6:             TypeInt 32 0
-  7(targetWidth):      6(int) SpecConstant 32
-               8:             TypeFloat 32
-               9:             TypePointer Output 8(float)
-   10(pointSize):      9(ptr) Variable Output
-     11(builtIn):      6(int) SpecConstant 1
-              12:    8(float) Constant 1082130432
-         4(main):           2 Function None 3
-               5:             Label
-                              Store 10(pointSize) 12
-                              Return
-                              FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out b/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out
index d46b33f..e15bb57 100644
--- a/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out
+++ b/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out
@@ -1,6 +1,6 @@
 spv.intrinsicsSpirvByReference.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out b/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out
index cbd46b0..b926c51 100644
--- a/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out
+++ b/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out
@@ -1,7 +1,6 @@
 spv.intrinsicsSpirvDecorate.frag
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 43
 
                               Capability Shader
@@ -28,19 +27,12 @@
                               Decorate 10(floatIn) Location 0
                               Decorate 10(floatIn) ExplicitInterpAMD
                               Decorate 18(vec2Out) Location 1
-                              Decorate 20(gl_BaryCoordNoPerspAMD) Location 0
                               Decorate 20(gl_BaryCoordNoPerspAMD) BuiltIn BaryCoordNoPerspAMD
-                              Decorate 22(gl_BaryCoordNoPerspCentroidAMD) Location 1
                               Decorate 22(gl_BaryCoordNoPerspCentroidAMD) BuiltIn BaryCoordNoPerspCentroidAMD
-                              Decorate 25(gl_BaryCoordNoPerspSampleAMD) Location 2
                               Decorate 25(gl_BaryCoordNoPerspSampleAMD) BuiltIn BaryCoordNoPerspSampleAMD
-                              Decorate 28(gl_BaryCoordSmoothAMD) Location 3
                               Decorate 28(gl_BaryCoordSmoothAMD) BuiltIn BaryCoordSmoothAMD
-                              Decorate 31(gl_BaryCoordSmoothCentroidAMD) Location 4
                               Decorate 31(gl_BaryCoordSmoothCentroidAMD) BuiltIn BaryCoordSmoothCentroidAMD
-                              Decorate 34(gl_BaryCoordSmoothSampleAMD) Location 5
                               Decorate 34(gl_BaryCoordSmoothSampleAMD) BuiltIn BaryCoordSmoothSampleAMD
-                              Decorate 39(gl_BaryCoordPullModelAMD) Location 6
                               Decorate 39(gl_BaryCoordPullModelAMD) BuiltIn BaryCoordPullModelAMD
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out b/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out
index 22bc53b..d5f935b 100644
--- a/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out
+++ b/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out
@@ -1,7 +1,6 @@
 spv.intrinsicsSpirvExecutionMode.frag
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 12
 
                               Capability Shader
@@ -17,7 +16,6 @@
                               Name 4  "main"
                               Name 8  "gl_FragStencilRef"
                               Name 10  "color"
-                              Decorate 8(gl_FragStencilRef) Location 0
                               Decorate 8(gl_FragStencilRef) BuiltIn FragStencilRefEXT
                               Decorate 10(color) Flat
                               Decorate 10(color) Location 0
diff --git a/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out b/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out
index 0e2780c..3103505 100644
--- a/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out
+++ b/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out
@@ -1,8 +1,7 @@
 spv.intrinsicsSpirvInstruction.vert
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
-// Id's are bound by 30
+// Generated by (magic number): 8000b
+// Id's are bound by 32
 
                               Capability Shader
                               Capability Int64
@@ -10,50 +9,52 @@
                               Extension  "SPV_AMD_shader_trinary_minmax"
                               Extension  "SPV_KHR_shader_clock"
                1:             ExtInstImport  "GLSL.std.450"
-              28:             ExtInstImport  "SPV_AMD_shader_trinary_minmax"
+              30:             ExtInstImport  "SPV_AMD_shader_trinary_minmax"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 9 13 18 21
+                              EntryPoint Vertex 4  "main" 9 15 20 23
                               Source GLSL 450
                               SourceExtension  "GL_ARB_gpu_shader_int64"
                               SourceExtension  "GL_EXT_spirv_intrinsics"
                               Name 4  "main"
                               Name 9  "uvec2Out"
-                              Name 13  "i64Out"
-                              Name 18  "vec2Out"
-                              Name 21  "vec3In"
+                              Name 15  "u64Out"
+                              Name 20  "vec2Out"
+                              Name 23  "vec3In"
                               Decorate 9(uvec2Out) Location 0
-                              Decorate 13(i64Out) Location 1
-                              Decorate 18(vec2Out) Location 2
-                              Decorate 21(vec3In) Location 0
+                              Decorate 15(u64Out) Location 1
+                              Decorate 20(vec2Out) Location 2
+                              Decorate 23(vec3In) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:             TypeVector 6(int) 2
                8:             TypePointer Output 7(ivec2)
      9(uvec2Out):      8(ptr) Variable Output
-              11:             TypeInt 64 1
-              12:             TypePointer Output 11(int64_t)
-      13(i64Out):     12(ptr) Variable Output
-              15:             TypeFloat 32
-              16:             TypeVector 15(float) 2
-              17:             TypePointer Output 16(fvec2)
-     18(vec2Out):     17(ptr) Variable Output
-              19:             TypeVector 15(float) 3
-              20:             TypePointer Input 19(fvec3)
-      21(vec3In):     20(ptr) Variable Input
+              10:             TypeInt 32 1
+              11:     10(int) Constant 1
+              13:             TypeInt 64 0
+              14:             TypePointer Output 13(int64_t)
+      15(u64Out):     14(ptr) Variable Output
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 2
+              19:             TypePointer Output 18(fvec2)
+     20(vec2Out):     19(ptr) Variable Output
+              21:             TypeVector 17(float) 3
+              22:             TypePointer Input 21(fvec3)
+      23(vec3In):     22(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-              10:    7(ivec2) ReadClockKHR
-                              Store 9(uvec2Out) 10
-              14: 11(int64_t) ReadClockKHR
-                              Store 13(i64Out) 14
-              22:   19(fvec3) Load 21(vec3In)
-              23:   16(fvec2) VectorShuffle 22 22 0 1
-              24:   19(fvec3) Load 21(vec3In)
-              25:   16(fvec2) VectorShuffle 24 24 1 2
-              26:   19(fvec3) Load 21(vec3In)
-              27:   16(fvec2) VectorShuffle 26 26 2 0
-              29:   16(fvec2) ExtInst 28(SPV_AMD_shader_trinary_minmax) 1(FMin3AMD) 23 25 27
-                              Store 18(vec2Out) 29
+              12:    7(ivec2) ReadClockKHR 11
+                              Store 9(uvec2Out) 12
+              16: 13(int64_t) ReadClockKHR 11
+                              Store 15(u64Out) 16
+              24:   21(fvec3) Load 23(vec3In)
+              25:   18(fvec2) VectorShuffle 24 24 0 1
+              26:   21(fvec3) Load 23(vec3In)
+              27:   18(fvec2) VectorShuffle 26 26 1 2
+              28:   21(fvec3) Load 23(vec3In)
+              29:   18(fvec2) VectorShuffle 28 28 2 0
+              31:   18(fvec2) ExtInst 30(SPV_AMD_shader_trinary_minmax) 1(FMin3AMD) 25 27 29
+                              Store 20(vec2Out) 31
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out
index 68ad949..48eef5e 100644
--- a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out
+++ b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out
@@ -1,30 +1,30 @@
 spv.intrinsicsSpirvLiteral.vert
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
-// Id's are bound by 12
+// Generated by (magic number): 8000b
+// Id's are bound by 13
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main"
+                              EntryPoint Vertex 4  "main" 9 11
                               Source GLSL 450
                               SourceExtension  "GL_EXT_spirv_intrinsics"
                               Name 4  "main"
                               Name 9  "vec4Out"
-                              Name 10  "vec4In"
+                              Name 11  "vec4In"
                               Decorate 9(vec4Out) Location 1
-                              Decorate 10(vec4In) Location 0
+                              Decorate 11(vec4In) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
+               8:             TypePointer Output 7(fvec4)
+      9(vec4Out):      8(ptr) Variable Output
+              10:             TypePointer Input 7(fvec4)
+      11(vec4In):     10(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-      9(vec4Out):      8(ptr) Variable Function
-      10(vec4In):      8(ptr) Variable Function
-              11:    7(fvec4) Load 10(vec4In) None
-                              Store 9(vec4Out) 11 Volatile 
+              12:    7(fvec4) Load 11(vec4In) None
+                              Store 9(vec4Out) 12 Volatile 
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out b/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out
index 4be5b91..3bf1394 100644
--- a/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out
+++ b/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out
@@ -1,6 +1,6 @@
 spv.intrinsicsSpirvStorageClass.rchit
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 13
 
                               Capability RayTracingKHR
diff --git a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out
index ac0c946..5d67de7 100644
--- a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out
+++ b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out
@@ -1,7 +1,6 @@
 spv.intrinsicsSpirvType.rgen
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 21
 
                               Capability RayQueryKHR
@@ -17,12 +16,13 @@
                               Name 4  "main"
                               Name 8  "rq"
                               Name 11  "as"
-                              Decorate 11(as) Location 0
                               Decorate 11(as) DescriptorSet 0
                               Decorate 11(as) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
+               6:             TypeRayQueryKHR
                7:             TypePointer Function 6
+               9:             TypeAccelerationStructureKHR
               10:             TypePointer UniformConstant 9
           11(as):     10(ptr) Variable UniformConstant
               13:             TypeInt 32 0
@@ -36,8 +36,6 @@
          4(main):           2 Function None 3
                5:             Label
            8(rq):      7(ptr) Variable Function
-               6:             TypeRayQueryKHR
-               9:             TypeAccelerationStructureKHR
               12:           9 Load 11(as)
                               RayQueryInitializeKHR 8(rq) 12 14 14 18 17 20 19
                               RayQueryTerminateKHR 8(rq)
diff --git a/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out b/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out
new file mode 100644
index 0000000..248af08
--- /dev/null
+++ b/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out
@@ -0,0 +1,43 @@
+spv.intrinsicsSpirvTypeLocalVar.vert
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 22
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_spirv_intrinsics"
+                              Name 4  "main"
+                              Name 10  "func(spv-t1;"
+                              Name 9  "emptyStruct"
+                              Name 13  "size"
+                              Name 16  "dummy"
+                              Name 18  "param"
+                              Decorate 13(size) SpecId 9
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeStruct
+               7:             TypePointer Function 6(struct)
+               8:             TypeFunction 2 7(ptr)
+              12:             TypeInt 32 1
+        13(size):     12(int) SpecConstant 9
+              14:             TypeArray 6(struct) 13(size)
+              15:             TypePointer Function 14
+              17:     12(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+       16(dummy):     15(ptr) Variable Function
+       18(param):      7(ptr) Variable Function
+              19:      7(ptr) AccessChain 16(dummy) 17
+              20:   6(struct) Load 19
+                              Store 18(param) 20
+              21:           2 FunctionCall 10(func(spv-t1;) 18(param)
+                              Return
+                              FunctionEnd
+10(func(spv-t1;):           2 Function None 8
+  9(emptyStruct):      7(ptr) FunctionParameter
+              11:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.invariantAll.vert.out b/Test/baseResults/spv.invariantAll.vert.out
index ec5ad30..d1703dc 100644
--- a/Test/baseResults/spv.invariantAll.vert.out
+++ b/Test/baseResults/spv.invariantAll.vert.out
@@ -1,6 +1,6 @@
 spv.invariantAll.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.layer.tese.out b/Test/baseResults/spv.layer.tese.out
index 906340f..fb78e63 100644
--- a/Test/baseResults/spv.layer.tese.out
+++ b/Test/baseResults/spv.layer.tese.out
@@ -1,6 +1,6 @@
 spv.layer.tese
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 10
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out
index 7de04d4..2d5111c 100644
--- a/Test/baseResults/spv.layoutNested.vert.out
+++ b/Test/baseResults/spv.layoutNested.vert.out
@@ -1,6 +1,6 @@
 spv.layoutNested.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
index 8957a3c..93199e7 100644
--- a/Test/baseResults/spv.length.frag.out
+++ b/Test/baseResults/spv.length.frag.out
@@ -1,6 +1,6 @@
 spv.length.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 33
 
                               Capability Shader
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 f45736c..7a80299 100644
--- a/Test/baseResults/spv.load.bool.array.interface.block.frag.out
+++ b/Test/baseResults/spv.load.bool.array.interface.block.frag.out
@@ -1,6 +1,6 @@
 spv.load.bool.array.interface.block.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
index 637fb6d..a9ce54f 100644
--- a/Test/baseResults/spv.localAggregates.frag.out
+++ b/Test/baseResults/spv.localAggregates.frag.out
@@ -1,6 +1,6 @@
 spv.localAggregates.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 136
 
                               Capability Shader
diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
index 7178f35..17f4db4 100644
--- a/Test/baseResults/spv.loops.frag.out
+++ b/Test/baseResults/spv.loops.frag.out
@@ -1,6 +1,6 @@
 spv.loops.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 725
 
                               Capability Shader
diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
index 4de834d..27a84fd 100644
--- a/Test/baseResults/spv.loopsArtificial.frag.out
+++ b/Test/baseResults/spv.loopsArtificial.frag.out
@@ -1,6 +1,6 @@
 spv.loopsArtificial.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 158
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
index 932018f..1201887 100644
--- a/Test/baseResults/spv.matFun.vert.out
+++ b/Test/baseResults/spv.matFun.vert.out
@@ -1,6 +1,6 @@
 spv.matFun.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 103
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matrix.frag.out b/Test/baseResults/spv.matrix.frag.out
index a287cda..deeaf90 100644
--- a/Test/baseResults/spv.matrix.frag.out
+++ b/Test/baseResults/spv.matrix.frag.out
@@ -1,6 +1,6 @@
 spv.matrix.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 286
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matrix2.frag.out b/Test/baseResults/spv.matrix2.frag.out
index 13f2708..f9cdaeb 100644
--- a/Test/baseResults/spv.matrix2.frag.out
+++ b/Test/baseResults/spv.matrix2.frag.out
@@ -1,6 +1,6 @@
 spv.matrix2.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 221
 
                               Capability Shader
diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out
index fce8c9c..e0a5207 100644
--- a/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/Test/baseResults/spv.memoryQualifier.frag.out
@@ -1,7 +1,7 @@
 spv.memoryQualifier.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 105
 
                               Capability Shader
diff --git a/Test/baseResults/spv.memoryScopeSemantics.comp.out b/Test/baseResults/spv.memoryScopeSemantics.comp.out
index 56c8470..1078aa5 100644
--- a/Test/baseResults/spv.memoryScopeSemantics.comp.out
+++ b/Test/baseResults/spv.memoryScopeSemantics.comp.out
@@ -1,6 +1,6 @@
 spv.memoryScopeSemantics.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 169
 
                               Capability Shader
diff --git a/Test/baseResults/spv.merge-unreachable.frag.out b/Test/baseResults/spv.merge-unreachable.frag.out
index dedec9c..2b919dc 100644
--- a/Test/baseResults/spv.merge-unreachable.frag.out
+++ b/Test/baseResults/spv.merge-unreachable.frag.out
@@ -1,6 +1,6 @@
 spv.merge-unreachable.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
index b26122e..f6b0f05 100644
--- a/Test/baseResults/spv.meshShaderBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 148
 
                               Capability ClipDistance
diff --git a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
index 86a4fd2..111fa2b 100644
--- a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderPerViewBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 126
 
                               Capability PerViewAttributesNV
diff --git a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
index e9eaed3..cd6a95b 100644
--- a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderPerViewUserDefined.mesh
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 108
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
index bfd2d85..60422d6 100644
--- a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderRedeclBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 129
 
                               Capability ClipDistance
diff --git a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
index 9f881e6..f6c2038 100644
--- a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderRedeclPerViewBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 120
 
                               Capability PerViewAttributesNV
diff --git a/Test/baseResults/spv.meshShaderSharedMem.mesh.out b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
index 7960ffa..9ad333c 100644
--- a/Test/baseResults/spv.meshShaderSharedMem.mesh.out
+++ b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderSharedMem.mesh
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 77
 
                               Capability StorageImageWriteWithoutFormat
diff --git a/Test/baseResults/spv.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
index be80439..fcbec3d 100644
--- a/Test/baseResults/spv.meshShaderTaskMem.mesh.out
+++ b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderTaskMem.mesh
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 58
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
index 01ee933..0e5fd05 100644
--- a/Test/baseResults/spv.meshShaderUserDefined.mesh.out
+++ b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderUserDefined.mesh
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 141
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.meshTaskShader.task.out b/Test/baseResults/spv.meshTaskShader.task.out
index 9fed191..9442f97 100644
--- a/Test/baseResults/spv.meshTaskShader.task.out
+++ b/Test/baseResults/spv.meshTaskShader.task.out
@@ -1,6 +1,6 @@
 spv.meshTaskShader.task
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 116
 
                               Capability StorageImageWriteWithoutFormat
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index 13a3528..0ff605c 100644
--- a/Test/baseResults/spv.multiStruct.comp.out
+++ b/Test/baseResults/spv.multiStruct.comp.out
@@ -1,6 +1,6 @@
 spv.multiStruct.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out
index eec734a..50f4b78 100644
--- a/Test/baseResults/spv.multiStructFuncall.frag.out
+++ b/Test/baseResults/spv.multiStructFuncall.frag.out
@@ -1,6 +1,6 @@
 spv.multiStructFuncall.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out
index a1575d9..c6afe8f 100644
--- a/Test/baseResults/spv.multiView.frag.out
+++ b/Test/baseResults/spv.multiView.frag.out
@@ -1,6 +1,6 @@
 spv.multiView.frag
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index b1c29f9..9527951 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
@@ -1,6 +1,6 @@
 spv.multiviewPerViewAttributes.tesc
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 41
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
index 0a4e1f0..8268e5d 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
@@ -1,6 +1,6 @@
 spv.multiviewPerViewAttributes.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
index 332ca66..723fe21 100644
--- a/Test/baseResults/spv.newTexture.frag.out
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -1,7 +1,7 @@
 spv.newTexture.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 284
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noBuiltInLoc.vert.out b/Test/baseResults/spv.noBuiltInLoc.vert.out
index 6322052..65ee22a 100644
--- a/Test/baseResults/spv.noBuiltInLoc.vert.out
+++ b/Test/baseResults/spv.noBuiltInLoc.vert.out
@@ -1,6 +1,6 @@
 spv.noBuiltInLoc.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noDeadDecorations.vert.out b/Test/baseResults/spv.noDeadDecorations.vert.out
index 4a4d7b3..0185eaf 100644
--- a/Test/baseResults/spv.noDeadDecorations.vert.out
+++ b/Test/baseResults/spv.noDeadDecorations.vert.out
@@ -1,6 +1,6 @@
 spv.noDeadDecorations.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out
index a8969e0..e92ebcb 100644
--- a/Test/baseResults/spv.noWorkgroup.comp.out
+++ b/Test/baseResults/spv.noWorkgroup.comp.out
@@ -1,6 +1,6 @@
 spv.noWorkgroup.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out
index 3728dd5..94401be 100644
--- a/Test/baseResults/spv.nonSquare.vert.out
+++ b/Test/baseResults/spv.nonSquare.vert.out
@@ -1,6 +1,6 @@
 spv.nonSquare.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out
index f6febc9..26b020c 100644
--- a/Test/baseResults/spv.nonuniform.frag.out
+++ b/Test/baseResults/spv.nonuniform.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 289
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform2.frag.out b/Test/baseResults/spv.nonuniform2.frag.out
index bb89ba7..b9d64dd 100644
--- a/Test/baseResults/spv.nonuniform2.frag.out
+++ b/Test/baseResults/spv.nonuniform2.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform2.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform3.frag.out b/Test/baseResults/spv.nonuniform3.frag.out
index b48916c..119a6d9 100644
--- a/Test/baseResults/spv.nonuniform3.frag.out
+++ b/Test/baseResults/spv.nonuniform3.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform3.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform4.frag.out b/Test/baseResults/spv.nonuniform4.frag.out
index 6bfc957..4442e5f 100644
--- a/Test/baseResults/spv.nonuniform4.frag.out
+++ b/Test/baseResults/spv.nonuniform4.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform4.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform5.frag.out b/Test/baseResults/spv.nonuniform5.frag.out
index ebbb6f4..abf10c2 100644
--- a/Test/baseResults/spv.nonuniform5.frag.out
+++ b/Test/baseResults/spv.nonuniform5.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform5.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nullInit.comp.out b/Test/baseResults/spv.nullInit.comp.out
index b7908b5..f432185 100755
--- a/Test/baseResults/spv.nullInit.comp.out
+++ b/Test/baseResults/spv.nullInit.comp.out
@@ -1,6 +1,6 @@
 spv.nullInit.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
index a1a9f31..d753f2f 100644
--- a/Test/baseResults/spv.offsets.frag.out
+++ b/Test/baseResults/spv.offsets.frag.out
@@ -1,6 +1,6 @@
 spv.offsets.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.paramMemory.420.frag.out b/Test/baseResults/spv.paramMemory.420.frag.out
index 4cdc35f..bc11df4 100644
--- a/Test/baseResults/spv.paramMemory.420.frag.out
+++ b/Test/baseResults/spv.paramMemory.420.frag.out
@@ -1,7 +1,7 @@
 spv.paramMemory.420.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 69
 
                               Capability Shader
diff --git a/Test/baseResults/spv.paramMemory.frag.out b/Test/baseResults/spv.paramMemory.frag.out
index a535cd3..ebb2ccb 100644
--- a/Test/baseResults/spv.paramMemory.frag.out
+++ b/Test/baseResults/spv.paramMemory.frag.out
@@ -1,7 +1,7 @@
 spv.paramMemory.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/spv.perprimitiveNV.frag.out b/Test/baseResults/spv.perprimitiveNV.frag.out
index 2a37f2b..079a5f4 100644
--- a/Test/baseResults/spv.perprimitiveNV.frag.out
+++ b/Test/baseResults/spv.perprimitiveNV.frag.out
@@ -1,6 +1,6 @@
 spv.perprimitiveNV.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pp.line.frag.out b/Test/baseResults/spv.pp.line.frag.out
index 549ae91..7218254 100644
--- a/Test/baseResults/spv.pp.line.frag.out
+++ b/Test/baseResults/spv.pp.line.frag.out
@@ -1,18 +1,19 @@
 spv.pp.line.frag
-WARNING: spv.pp.line.frag:6: varying deprecated in version 130; may be removed in future release
 WARNING: spv.pp.line.frag:7: varying deprecated in version 130; may be removed in future release
+WARNING: spv.pp.line.frag:8: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 8000a
-// Id's are bound by 65
+// Generated by (magic number): 8000b
+// Id's are bound by 84
 
                               Capability Shader
                               Capability Sampled1D
                2:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 5  "main" 41 53 56 59
+                              EntryPoint Fragment 5  "main" 60 72 75 78
                               ExecutionMode 5 OriginUpperLeft
                1:             String  "spv.pp.line.frag"
+              13:             String  "header.h"
                               Source GLSL 140 1  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
@@ -21,6 +22,7 @@
 // OpModuleProcessed entry-point main
 #line 1
 #version 140
+#extension GL_GOOGLE_cpp_style_line_directive : require
 
 uniform sampler1D       texSampler1D;
 uniform sampler2D       texSampler2D;
@@ -30,9 +32,20 @@
 
 in  vec2 coords2D;
 
+#line 0 "header.h"
+float myAbs(float x) {
+    if (x > 0) {
+        return x;
+    }
+    else {
+        return -x;
+    }
+}
+
+#line 22 "spv.pp.line.frag"
 void main()
 {
-    float blendscale = 1.789;
+    float blendscale = myAbs(1.789);
     float bias       = 2.0;
     float coords1D   = 1.789;
     vec4  color      = vec4(0.0, 0.0, 0.0, 0.0);
@@ -46,104 +59,135 @@
     gl_FragColor = mix(color, u, blend * blendscale);
 }
 "
+                              SourceExtension  "GL_GOOGLE_cpp_style_line_directive"
                               Name 5  "main"
-                              Name 9  "blendscale"
-                              Name 11  "bias"
-                              Name 13  "coords1D"
-                              Name 16  "color"
-                              Name 22  "texSampler1D"
-                              Name 37  "texSampler2D"
-                              Name 41  "coords2D"
-                              Name 53  "gl_FragColor"
-                              Name 56  "u"
-                              Name 59  "blend"
-                              Decorate 22(texSampler1D) DescriptorSet 0
-                              Decorate 22(texSampler1D) Binding 0
-                              Decorate 37(texSampler2D) DescriptorSet 0
-                              Decorate 37(texSampler2D) Binding 1
-                              Decorate 41(coords2D) Location 2
-                              Decorate 53(gl_FragColor) Location 0
-                              Decorate 56(u) Location 1
-                              Decorate 59(blend) Location 0
+                              Name 11  "myAbs(f1;"
+                              Name 10  "x"
+                              Name 27  "blendscale"
+                              Name 29  "param"
+                              Name 31  "bias"
+                              Name 33  "coords1D"
+                              Name 36  "color"
+                              Name 41  "texSampler1D"
+                              Name 56  "texSampler2D"
+                              Name 60  "coords2D"
+                              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 56(texSampler2D) Binding 1
+                              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)
-              10:    7(float) Constant 1071971828
-              12:    7(float) Constant 1073741824
-              14:             TypeVector 7(float) 4
-              15:             TypePointer Function 14(fvec4)
-              17:    7(float) Constant 0
-              18:   14(fvec4) ConstantComposite 17 17 17 17
-              19:             TypeImage 7(float) 1D sampled format:Unknown
-              20:             TypeSampledImage 19
-              21:             TypePointer UniformConstant 20
-22(texSampler1D):     21(ptr) Variable UniformConstant
-              34:             TypeImage 7(float) 2D sampled format:Unknown
-              35:             TypeSampledImage 34
-              36:             TypePointer UniformConstant 35
-37(texSampler2D):     36(ptr) Variable UniformConstant
-              39:             TypeVector 7(float) 2
-              40:             TypePointer Input 39(fvec2)
-    41(coords2D):     40(ptr) Variable Input
-              52:             TypePointer Output 14(fvec4)
-53(gl_FragColor):     52(ptr) Variable Output
-              55:             TypePointer Input 14(fvec4)
-           56(u):     55(ptr) Variable Input
-              58:             TypePointer Input 7(float)
-       59(blend):     58(ptr) Variable Input
+               9:             TypeFunction 7(float) 8(ptr)
+              15:    7(float) Constant 0
+              16:             TypeBool
+              28:    7(float) Constant 1071971828
+              32:    7(float) Constant 1073741824
+              34:             TypeVector 7(float) 4
+              35:             TypePointer Function 34(fvec4)
+              37:   34(fvec4) ConstantComposite 15 15 15 15
+              38:             TypeImage 7(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
+              54:             TypeSampledImage 53
+              55:             TypePointer UniformConstant 54
+56(texSampler2D):     55(ptr) Variable UniformConstant
+              58:             TypeVector 7(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)
+       78(blend):     77(ptr) Variable Input
+                              Line 1 23 11
          5(main):           3 Function None 4
                6:             Label
-   9(blendscale):      8(ptr) Variable Function
-        11(bias):      8(ptr) Variable Function
-    13(coords1D):      8(ptr) Variable Function
-       16(color):     15(ptr) Variable Function
-                              Line 1 13 0
-                              Store 9(blendscale) 10
-                              Line 1 14 0
-                              Store 11(bias) 12
-                              Line 1 15 0
-                              Store 13(coords1D) 10
-                              Line 1 16 0
-                              Store 16(color) 18
+  27(blendscale):      8(ptr) Variable Function
+       29(param):      8(ptr) Variable Function
+        31(bias):      8(ptr) Variable Function
+    33(coords1D):      8(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)
+                              Store 27(blendscale) 30
+                              Line 1 26 0
+                              Store 31(bias) 32
+                              Line 1 27 0
+                              Store 33(coords1D) 28
+                              Line 1 28 0
+                              Store 36(color) 37
                               Line 1 54 0
-              23:          20 Load 22(texSampler1D)
-              24:    7(float) Load 13(coords1D)
-              25:   14(fvec4) ImageSampleImplicitLod 23 24
-              26:   14(fvec4) Load 16(color)
-              27:   14(fvec4) FAdd 26 25
-                              Store 16(color) 27
+              42:          39 Load 41(texSampler1D)
+              43:    7(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
-              28:          20 Load 22(texSampler1D)
-              29:    7(float) Load 13(coords1D)
-              30:    7(float) Load 11(bias)
-              31:   14(fvec4) ImageSampleImplicitLod 28 29 Bias 30
-              32:   14(fvec4) Load 16(color)
-              33:   14(fvec4) FAdd 32 31
-                              Store 16(color) 33
+              47:          39 Load 41(texSampler1D)
+              48:    7(float) Load 33(coords1D)
+              49:    7(float) Load 31(bias)
+              50:   34(fvec4) ImageSampleImplicitLod 47 48 Bias 49
+              51:   34(fvec4) Load 36(color)
+              52:   34(fvec4) FAdd 51 50
+                              Store 36(color) 52
                               Line 1 103 0
-              38:          35 Load 37(texSampler2D)
-              42:   39(fvec2) Load 41(coords2D)
-              43:   14(fvec4) ImageSampleImplicitLod 38 42
-              44:   14(fvec4) Load 16(color)
-              45:   14(fvec4) FAdd 44 43
-                              Store 16(color) 45
+              57:          54 Load 56(texSampler2D)
+              61:   58(fvec2) Load 60(coords2D)
+              62:   34(fvec4) ImageSampleImplicitLod 57 61
+              63:   34(fvec4) Load 36(color)
+              64:   34(fvec4) FAdd 63 62
+                              Store 36(color) 64
                               Line 1 104 0
-              46:          35 Load 37(texSampler2D)
-              47:   39(fvec2) Load 41(coords2D)
-              48:    7(float) Load 11(bias)
-              49:   14(fvec4) ImageSampleImplicitLod 46 47 Bias 48
-              50:   14(fvec4) Load 16(color)
-              51:   14(fvec4) FAdd 50 49
-                              Store 16(color) 51
+              65:          54 Load 56(texSampler2D)
+              66:   58(fvec2) Load 60(coords2D)
+              67:    7(float) Load 31(bias)
+              68:   34(fvec4) ImageSampleImplicitLod 65 66 Bias 67
+              69:   34(fvec4) Load 36(color)
+              70:   34(fvec4) FAdd 69 68
+                              Store 36(color) 70
                               Line 1 106 0
-              54:   14(fvec4) Load 16(color)
-              57:   14(fvec4) Load 56(u)
-              60:    7(float) Load 59(blend)
-              61:    7(float) Load 9(blendscale)
-              62:    7(float) FMul 60 61
-              63:   14(fvec4) CompositeConstruct 62 62 62 62
-              64:   14(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 54 57 63
-                              Store 53(gl_FragColor) 64
+              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
+              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
                               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)
+              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)
+                                ReturnValue 20
+              22:               Label
+                                Line 13 6 0
+              23:    7(float)   Load 10(x)
+              24:    7(float)   FNegate 23
+                                ReturnValue 24
+              19:             Label
+                              Unreachable
+                              FunctionEnd
diff --git a/Test/baseResults/spv.precise.tesc.out b/Test/baseResults/spv.precise.tesc.out
index e13c612..84617ca 100644
--- a/Test/baseResults/spv.precise.tesc.out
+++ b/Test/baseResults/spv.precise.tesc.out
@@ -1,6 +1,6 @@
 spv.precise.tesc
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 72
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out
index 7db4ed0..6fe183d 100644
--- a/Test/baseResults/spv.precise.tese.out
+++ b/Test/baseResults/spv.precise.tese.out
@@ -1,6 +1,6 @@
 spv.precise.tese
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 119
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
index 1d31230..8144dfb 100644
--- a/Test/baseResults/spv.precision.frag.out
+++ b/Test/baseResults/spv.precision.frag.out
@@ -1,6 +1,6 @@
 spv.precision.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 165
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precisionArgs.frag.out b/Test/baseResults/spv.precisionArgs.frag.out
index ae54a58..a35b1d3 100644
--- a/Test/baseResults/spv.precisionArgs.frag.out
+++ b/Test/baseResults/spv.precisionArgs.frag.out
@@ -1,6 +1,6 @@
 spv.precisionArgs.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 83
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out
index c4cd1eb..40ca536 100644
--- a/Test/baseResults/spv.precisionNonESSamp.frag.out
+++ b/Test/baseResults/spv.precisionNonESSamp.frag.out
@@ -1,6 +1,6 @@
 spv.precisionNonESSamp.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 47
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precisionTexture.frag.out b/Test/baseResults/spv.precisionTexture.frag.out
index d5e21b6..e46b2d7 100644
--- a/Test/baseResults/spv.precisionTexture.frag.out
+++ b/Test/baseResults/spv.precisionTexture.frag.out
@@ -1,6 +1,6 @@
 spv.precisionTexture.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
index 5fd6b37..b1f2d5e 100644
--- a/Test/baseResults/spv.prepost.frag.out
+++ b/Test/baseResults/spv.prepost.frag.out
@@ -1,6 +1,6 @@
 spv.prepost.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 94
 
                               Capability Shader
diff --git a/Test/baseResults/spv.privateVariableTypes.frag.out b/Test/baseResults/spv.privateVariableTypes.frag.out
index d5ad68a..b09062a 100644
--- a/Test/baseResults/spv.privateVariableTypes.frag.out
+++ b/Test/baseResults/spv.privateVariableTypes.frag.out
@@ -1,6 +1,6 @@
 spv.privateVariableTypes.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pushConstant.vert.out b/Test/baseResults/spv.pushConstant.vert.out
index 888d134..f6df47d 100644
--- a/Test/baseResults/spv.pushConstant.vert.out
+++ b/Test/baseResults/spv.pushConstant.vert.out
@@ -1,6 +1,6 @@
 spv.pushConstant.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pushConstantAnon.vert.out b/Test/baseResults/spv.pushConstantAnon.vert.out
index 75efdbc..ca7d345 100644
--- a/Test/baseResults/spv.pushConstantAnon.vert.out
+++ b/Test/baseResults/spv.pushConstantAnon.vert.out
@@ -1,6 +1,6 @@
 spv.pushConstantAnon.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
index 4180e17..0f0f347 100644
--- a/Test/baseResults/spv.qualifiers.vert.out
+++ b/Test/baseResults/spv.qualifiers.vert.out
@@ -1,6 +1,6 @@
 spv.qualifiers.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
index 1e38661..1e18387 100644
--- a/Test/baseResults/spv.queryL.frag.out
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -1,7 +1,7 @@
 spv.queryL.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 224
 
                               Capability Shader
diff --git a/Test/baseResults/spv.queueFamilyScope.comp.out b/Test/baseResults/spv.queueFamilyScope.comp.out
index 9c239df..49a59a3 100644
--- a/Test/baseResults/spv.queueFamilyScope.comp.out
+++ b/Test/baseResults/spv.queueFamilyScope.comp.out
@@ -1,6 +1,6 @@
 spv.queueFamilyScope.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out
index 1a725c1..cecde79 100644
--- a/Test/baseResults/spv.rankShift.comp.out
+++ b/Test/baseResults/spv.rankShift.comp.out
@@ -1,6 +1,6 @@
 spv.rankShift.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out
index 26b149b..61d920c 100644
--- a/Test/baseResults/spv.register.autoassign-2.frag.out
+++ b/Test/baseResults/spv.register.autoassign-2.frag.out
@@ -1,6 +1,6 @@
 spv.register.autoassign-2.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 47
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign.frag.out b/Test/baseResults/spv.register.autoassign.frag.out
index e347ce2..b4db04e 100644
--- a/Test/baseResults/spv.register.autoassign.frag.out
+++ b/Test/baseResults/spv.register.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.register.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign.rangetest.frag.out b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
index 4381dab..84a439a 100644
--- a/Test/baseResults/spv.register.autoassign.rangetest.frag.out
+++ b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
@@ -3,7 +3,7 @@
 INTERNAL ERROR: mapped binding out of range: g_tScene
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.noautoassign.frag.out b/Test/baseResults/spv.register.noautoassign.frag.out
index ed8d507..8c8cd3c 100644
--- a/Test/baseResults/spv.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.register.noautoassign.frag.out
@@ -1,6 +1,6 @@
 spv.register.noautoassign.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.subpass.frag.out b/Test/baseResults/spv.register.subpass.frag.out
index acd447d..7c69c91 100644
--- a/Test/baseResults/spv.register.subpass.frag.out
+++ b/Test/baseResults/spv.register.subpass.frag.out
@@ -1,6 +1,6 @@
 spv.register.subpass.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out
index 27db336..0c46493 100644
--- a/Test/baseResults/spv.rw.autoassign.frag.out
+++ b/Test/baseResults/spv.rw.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.rw.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sample.frag.out b/Test/baseResults/spv.sample.frag.out
index f43fc98..631a559 100644
--- a/Test/baseResults/spv.sample.frag.out
+++ b/Test/baseResults/spv.sample.frag.out
@@ -1,6 +1,6 @@
 spv.sample.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 13
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sampleId.frag.out b/Test/baseResults/spv.sampleId.frag.out
index 8f9bc38..7f3232d 100644
--- a/Test/baseResults/spv.sampleId.frag.out
+++ b/Test/baseResults/spv.sampleId.frag.out
@@ -1,6 +1,6 @@
 spv.sampleId.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
index 9b401d8..6f22c5a 100644
--- a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
+++ b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.sampleMaskOverrideCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.samplePosition.frag.out b/Test/baseResults/spv.samplePosition.frag.out
index 8012830..6c98add 100644
--- a/Test/baseResults/spv.samplePosition.frag.out
+++ b/Test/baseResults/spv.samplePosition.frag.out
@@ -1,6 +1,6 @@
 spv.samplePosition.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
index c2c431d..4479912 100644
--- a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
+++ b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
@@ -1,6 +1,6 @@
 spv.samplerlessTextureFunctions.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/spv.scalarlayout.frag.out b/Test/baseResults/spv.scalarlayout.frag.out
index e08721f..977f06b 100644
--- a/Test/baseResults/spv.scalarlayout.frag.out
+++ b/Test/baseResults/spv.scalarlayout.frag.out
@@ -1,6 +1,6 @@
 spv.scalarlayout.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.scalarlayoutfloat16.frag.out b/Test/baseResults/spv.scalarlayoutfloat16.frag.out
index 4f22730..93c0d2a 100644
--- a/Test/baseResults/spv.scalarlayoutfloat16.frag.out
+++ b/Test/baseResults/spv.scalarlayoutfloat16.frag.out
@@ -1,6 +1,6 @@
 spv.scalarlayoutfloat16.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out
index d31f897..b960934 100644
--- a/Test/baseResults/spv.separate.frag.out
+++ b/Test/baseResults/spv.separate.frag.out
@@ -1,7 +1,7 @@
 spv.separate.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 319
 
                               Capability Shader
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
index 245b4bd..b311c70 100644
--- a/Test/baseResults/spv.set.vert.out
+++ b/Test/baseResults/spv.set.vert.out
@@ -1,6 +1,6 @@
 spv.set.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index 2a0106e..143b2e9 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -1,6 +1,6 @@
 spv.shaderBallot.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 397
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderBallotAMD.comp.out b/Test/baseResults/spv.shaderBallotAMD.comp.out
index 9ea5ba0..2d8ad55 100644
--- a/Test/baseResults/spv.shaderBallotAMD.comp.out
+++ b/Test/baseResults/spv.shaderBallotAMD.comp.out
@@ -1,6 +1,6 @@
 spv.shaderBallotAMD.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 1343
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderDrawParams.vert.out b/Test/baseResults/spv.shaderDrawParams.vert.out
index 5baabbf..a84c2fe 100644
--- a/Test/baseResults/spv.shaderDrawParams.vert.out
+++ b/Test/baseResults/spv.shaderDrawParams.vert.out
@@ -1,6 +1,6 @@
 spv.shaderDrawParams.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderFragMaskAMD.frag.out b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
index ab48e04..3b46114 100644
--- a/Test/baseResults/spv.shaderFragMaskAMD.frag.out
+++ b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
@@ -1,6 +1,6 @@
 spv.shaderFragMaskAMD.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderGroupVote.comp.out b/Test/baseResults/spv.shaderGroupVote.comp.out
index 4c45e33..0724170 100644
--- a/Test/baseResults/spv.shaderGroupVote.comp.out
+++ b/Test/baseResults/spv.shaderGroupVote.comp.out
@@ -1,6 +1,6 @@
 spv.shaderGroupVote.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderImageFootprint.frag.out b/Test/baseResults/spv.shaderImageFootprint.frag.out
index ea8873c..743fd36 100644
--- a/Test/baseResults/spv.shaderImageFootprint.frag.out
+++ b/Test/baseResults/spv.shaderImageFootprint.frag.out
@@ -1,6 +1,6 @@
 spv.shaderImageFootprint.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 622
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderStencilExport.frag.out b/Test/baseResults/spv.shaderStencilExport.frag.out
index f73349c..ca85473 100644
--- a/Test/baseResults/spv.shaderStencilExport.frag.out
+++ b/Test/baseResults/spv.shaderStencilExport.frag.out
@@ -1,6 +1,6 @@
 spv.shaderStencilExport.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 10
 
                               Capability Shader
@@ -10,6 +10,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 8
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 StencilRefReplacingEXT
                               Source GLSL 450
                               SourceExtension  "GL_ARB_shader_stencil_export"
                               Name 4  "main"
diff --git a/Test/baseResults/spv.shadingRate.frag.out b/Test/baseResults/spv.shadingRate.frag.out
index 866ae60..86079ce 100644
--- a/Test/baseResults/spv.shadingRate.frag.out
+++ b/Test/baseResults/spv.shadingRate.frag.out
@@ -1,6 +1,6 @@
 spv.shadingRate.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shiftOps.frag.out b/Test/baseResults/spv.shiftOps.frag.out
index 03f7546..6f232a0 100644
--- a/Test/baseResults/spv.shiftOps.frag.out
+++ b/Test/baseResults/spv.shiftOps.frag.out
@@ -1,6 +1,6 @@
 spv.shiftOps.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shortCircuit.frag.out b/Test/baseResults/spv.shortCircuit.frag.out
index 3c706f7..017c88d 100644
--- a/Test/baseResults/spv.shortCircuit.frag.out
+++ b/Test/baseResults/spv.shortCircuit.frag.out
@@ -1,6 +1,6 @@
 spv.shortCircuit.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 147
 
                               Capability Shader
diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
index bda91b7..8e879bb 100644
--- a/Test/baseResults/spv.simpleFunctionCall.frag.out
+++ b/Test/baseResults/spv.simpleFunctionCall.frag.out
@@ -1,6 +1,6 @@
 spv.simpleFunctionCall.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
index cc9b2b2..e1accbf 100644
--- a/Test/baseResults/spv.simpleMat.vert.out
+++ b/Test/baseResults/spv.simpleMat.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:3: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.smBuiltins.frag.out b/Test/baseResults/spv.smBuiltins.frag.out
index 3fafa04..1619cf6 100644
--- a/Test/baseResults/spv.smBuiltins.frag.out
+++ b/Test/baseResults/spv.smBuiltins.frag.out
@@ -1,6 +1,6 @@
 spv.smBuiltins.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.smBuiltins.vert.out b/Test/baseResults/spv.smBuiltins.vert.out
index 91ad637..c03c3cd 100644
--- a/Test/baseResults/spv.smBuiltins.vert.out
+++ b/Test/baseResults/spv.smBuiltins.vert.out
@@ -1,6 +1,6 @@
 spv.smBuiltins.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out
index bf44b81..84ca757 100644
--- a/Test/baseResults/spv.sparseTexture.frag.out
+++ b/Test/baseResults/spv.sparseTexture.frag.out
@@ -1,7 +1,7 @@
 spv.sparseTexture.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 442
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index f42326d..e56297c 100644
--- a/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -1,7 +1,7 @@
 spv.sparseTextureClamp.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 360
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
index a510dc9..a2e234b 100644
--- a/Test/baseResults/spv.specConst.vert.out
+++ b/Test/baseResults/spv.specConst.vert.out
@@ -1,6 +1,6 @@
 spv.specConst.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.comp.out b/Test/baseResults/spv.specConstant.comp.out
index a4e769f..bfe7114 100644
--- a/Test/baseResults/spv.specConstant.comp.out
+++ b/Test/baseResults/spv.specConstant.comp.out
@@ -1,6 +1,6 @@
 spv.specConstant.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.float16.comp.out b/Test/baseResults/spv.specConstant.float16.comp.out
index be02057..3381fc7 100644
--- a/Test/baseResults/spv.specConstant.float16.comp.out
+++ b/Test/baseResults/spv.specConstant.float16.comp.out
@@ -1,6 +1,6 @@
 spv.specConstant.float16.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.int16.comp.out b/Test/baseResults/spv.specConstant.int16.comp.out
index 7bb4c8f..17f385b 100644
--- a/Test/baseResults/spv.specConstant.int16.comp.out
+++ b/Test/baseResults/spv.specConstant.int16.comp.out
@@ -1,6 +1,6 @@
 spv.specConstant.int16.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.int8.comp.out b/Test/baseResults/spv.specConstant.int8.comp.out
index 0ab3bdc..c906d71 100644
--- a/Test/baseResults/spv.specConstant.int8.comp.out
+++ b/Test/baseResults/spv.specConstant.int8.comp.out
@@ -1,6 +1,6 @@
 spv.specConstant.int8.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index f7d4381..cc126ab 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -1,6 +1,6 @@
 spv.specConstant.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 81
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstantComposite.vert.out b/Test/baseResults/spv.specConstantComposite.vert.out
index 15777d8..ce9ce06 100644
--- a/Test/baseResults/spv.specConstantComposite.vert.out
+++ b/Test/baseResults/spv.specConstantComposite.vert.out
@@ -1,6 +1,6 @@
 spv.specConstantComposite.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstantOperations.vert.out b/Test/baseResults/spv.specConstantOperations.vert.out
index 5366460..cb1f739 100644
--- a/Test/baseResults/spv.specConstantOperations.vert.out
+++ b/Test/baseResults/spv.specConstantOperations.vert.out
@@ -1,6 +1,6 @@
 spv.specConstantOperations.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specTexture.frag.out b/Test/baseResults/spv.specTexture.frag.out
index 4ca488e..b599e35 100644
--- a/Test/baseResults/spv.specTexture.frag.out
+++ b/Test/baseResults/spv.specTexture.frag.out
@@ -1,6 +1,6 @@
 spv.specTexture.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ssbo.autoassign.frag.out b/Test/baseResults/spv.ssbo.autoassign.frag.out
index e2db863..3538105 100644
--- a/Test/baseResults/spv.ssbo.autoassign.frag.out
+++ b/Test/baseResults/spv.ssbo.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.ssbo.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ssboAlias.frag.out b/Test/baseResults/spv.ssboAlias.frag.out
index cdcd222..0a5a12b 100644
--- a/Test/baseResults/spv.ssboAlias.frag.out
+++ b/Test/baseResults/spv.ssboAlias.frag.out
@@ -1,6 +1,6 @@
 spv.ssboAlias.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out
index f01e53b..100b553 100644
--- a/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -1,6 +1,6 @@
 spv.stereoViewRendering.tesc
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 42
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.stereoViewRendering.vert.out b/Test/baseResults/spv.stereoViewRendering.vert.out
index e74921a..530d75e 100644
--- a/Test/baseResults/spv.stereoViewRendering.vert.out
+++ b/Test/baseResults/spv.stereoViewRendering.vert.out
@@ -1,6 +1,6 @@
 spv.stereoViewRendering.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.storageBuffer.vert.out b/Test/baseResults/spv.storageBuffer.vert.out
index 2411d2f..fdbb4db 100644
--- a/Test/baseResults/spv.storageBuffer.vert.out
+++ b/Test/baseResults/spv.storageBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.storageBuffer.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
index 8e82cac..a0cfb54 100644
--- a/Test/baseResults/spv.structAssignment.frag.out
+++ b/Test/baseResults/spv.structAssignment.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
index 94fc4e2..a528a59 100644
--- a/Test/baseResults/spv.structDeref.frag.out
+++ b/Test/baseResults/spv.structDeref.frag.out
@@ -1,6 +1,6 @@
 spv.structDeref.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 123
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
index 00fed0e..6b39c29 100644
--- a/Test/baseResults/spv.structure.frag.out
+++ b/Test/baseResults/spv.structure.frag.out
@@ -1,6 +1,6 @@
 spv.structure.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroup.frag.out b/Test/baseResults/spv.subgroup.frag.out
index a3e427f..a882a22 100644
--- a/Test/baseResults/spv.subgroup.frag.out
+++ b/Test/baseResults/spv.subgroup.frag.out
@@ -1,6 +1,6 @@
 spv.subgroup.frag
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroup.geom.out b/Test/baseResults/spv.subgroup.geom.out
index 27f05b2..3340595 100644
--- a/Test/baseResults/spv.subgroup.geom.out
+++ b/Test/baseResults/spv.subgroup.geom.out
@@ -1,6 +1,6 @@
 spv.subgroup.geom
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 26
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.subgroup.tesc.out b/Test/baseResults/spv.subgroup.tesc.out
index 8322a4a..aaac4b8 100644
--- a/Test/baseResults/spv.subgroup.tesc.out
+++ b/Test/baseResults/spv.subgroup.tesc.out
@@ -1,6 +1,6 @@
 spv.subgroup.tesc
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 26
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.subgroup.tese.out b/Test/baseResults/spv.subgroup.tese.out
index 360f98b..f989981 100644
--- a/Test/baseResults/spv.subgroup.tese.out
+++ b/Test/baseResults/spv.subgroup.tese.out
@@ -1,6 +1,6 @@
 spv.subgroup.tese
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 26
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.subgroup.vert.out b/Test/baseResults/spv.subgroup.vert.out
index 6de8a0a..6add1c7 100644
--- a/Test/baseResults/spv.subgroup.vert.out
+++ b/Test/baseResults/spv.subgroup.vert.out
@@ -1,6 +1,6 @@
 spv.subgroup.vert
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupArithmetic.comp.out b/Test/baseResults/spv.subgroupArithmetic.comp.out
index 87bfa31..bd71fc7 100644
--- a/Test/baseResults/spv.subgroupArithmetic.comp.out
+++ b/Test/baseResults/spv.subgroupArithmetic.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupArithmetic.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 2386
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupBallot.comp.out b/Test/baseResults/spv.subgroupBallot.comp.out
index 65cfa7a..51cb7ac 100644
--- a/Test/baseResults/spv.subgroupBallot.comp.out
+++ b/Test/baseResults/spv.subgroupBallot.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupBallot.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 437
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupBasic.comp.out b/Test/baseResults/spv.subgroupBasic.comp.out
index fb9fa0c..51eae75 100644
--- a/Test/baseResults/spv.subgroupBasic.comp.out
+++ b/Test/baseResults/spv.subgroupBasic.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupBasic.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupClustered.comp.out b/Test/baseResults/spv.subgroupClustered.comp.out
index a2e486d..2529eef 100644
--- a/Test/baseResults/spv.subgroupClustered.comp.out
+++ b/Test/baseResults/spv.subgroupClustered.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupClustered.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 838
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
index 828ce61..51c2a5e 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesArithmetic.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 4218
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
index 60f01bc..0a706a5 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesBallot.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 498
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
index 98a7a89..f876c5a 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesClustered.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 1458
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
index 47576d9..f2cb8cb 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesPartitioned.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 1743
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
index f385545..8aa7c12 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesQuad.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 918
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
index eaea708..0051bd7 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesShuffle.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 554
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
index 8665c46..46244ba 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesShuffleRelative.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 554
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
index 6fde1f9..a53847c 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesVote.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 277
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupPartitioned.comp.out b/Test/baseResults/spv.subgroupPartitioned.comp.out
index 0e7b7ef..922d393 100644
--- a/Test/baseResults/spv.subgroupPartitioned.comp.out
+++ b/Test/baseResults/spv.subgroupPartitioned.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupPartitioned.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 2807
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupQuad.comp.out b/Test/baseResults/spv.subgroupQuad.comp.out
index 143d01d..b418148 100644
--- a/Test/baseResults/spv.subgroupQuad.comp.out
+++ b/Test/baseResults/spv.subgroupQuad.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupQuad.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 696
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupShuffle.comp.out b/Test/baseResults/spv.subgroupShuffle.comp.out
index 02cf89f..d54e8ae 100644
--- a/Test/baseResults/spv.subgroupShuffle.comp.out
+++ b/Test/baseResults/spv.subgroupShuffle.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupShuffle.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 420
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupShuffleRelative.comp.out b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
index e8486b6..6bae808 100644
--- a/Test/baseResults/spv.subgroupShuffleRelative.comp.out
+++ b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupShuffleRelative.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 420
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupSizeARB.frag.out b/Test/baseResults/spv.subgroupSizeARB.frag.out
new file mode 100644
index 0000000..5eeb0c0
--- /dev/null
+++ b/Test/baseResults/spv.subgroupSizeARB.frag.out
@@ -0,0 +1,34 @@
+spv.subgroupSizeARB.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 12
+
+                              Capability Shader
+                              Capability SubgroupBallotKHR
+                              Extension  "SPV_KHR_shader_ballot"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 10
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_shader_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 8  "result"
+                              Name 10  "gl_SubGroupSizeARB"
+                              Decorate 8(result) Location 0
+                              Decorate 10(gl_SubGroupSizeARB) Flat
+                              Decorate 10(gl_SubGroupSizeARB) BuiltIn SubgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Output 6(int)
+       8(result):      7(ptr) Variable Output
+               9:             TypePointer Input 6(int)
+10(gl_SubGroupSizeARB):      9(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              11:      6(int) Load 10(gl_SubGroupSizeARB)
+                              Store 8(result) 11
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupUniformControlFlow.vert.out b/Test/baseResults/spv.subgroupUniformControlFlow.vert.out
index b7fce5a..a189186 100644
--- a/Test/baseResults/spv.subgroupUniformControlFlow.vert.out
+++ b/Test/baseResults/spv.subgroupUniformControlFlow.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:7: '' : attribute with arguments not recognized, skipping 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupVote.comp.out b/Test/baseResults/spv.subgroupVote.comp.out
index ad8ffaa..fa0a01f 100644
--- a/Test/baseResults/spv.subgroupVote.comp.out
+++ b/Test/baseResults/spv.subgroupVote.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupVote.comp
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 216
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out
index 6b534a6..bf49b08 100644
--- a/Test/baseResults/spv.subpass.frag.out
+++ b/Test/baseResults/spv.subpass.frag.out
@@ -1,6 +1,6 @@
 spv.subpass.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 67
 
                               Capability Shader
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index 9c68657..4e7db4d 100644
--- a/Test/baseResults/spv.switch.frag.out
+++ b/Test/baseResults/spv.switch.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:139: 'switch' : last case/default label not followed by statements 
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 269
 
                               Capability Shader
diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
index 2aa31e8..f42a34b 100644
--- a/Test/baseResults/spv.swizzle.frag.out
+++ b/Test/baseResults/spv.swizzle.frag.out
@@ -1,6 +1,6 @@
 spv.swizzle.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 117
 
                               Capability Shader
diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out
index 8d09934..32a0132 100644
--- a/Test/baseResults/spv.swizzleInversion.frag.out
+++ b/Test/baseResults/spv.swizzleInversion.frag.out
@@ -1,6 +1,6 @@
 spv.swizzleInversion.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.terminate.frag.out b/Test/baseResults/spv.terminate.frag.out
index 39cb151..d76a487 100755
--- a/Test/baseResults/spv.terminate.frag.out
+++ b/Test/baseResults/spv.terminate.frag.out
@@ -1,6 +1,6 @@
 spv.terminate.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 7
 
                               Capability Shader
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index fddcdb8..c5d6384 100644
--- a/Test/baseResults/spv.test.frag.out
+++ b/Test/baseResults/spv.test.frag.out
@@ -1,6 +1,6 @@
 spv.test.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 55
 
                               Capability Shader
diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out
index 3eb6435..350ee78 100644
--- a/Test/baseResults/spv.test.vert.out
+++ b/Test/baseResults/spv.test.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:5: attribute deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
index 841bbd3..dc1970a 100644
--- a/Test/baseResults/spv.texture.frag.out
+++ b/Test/baseResults/spv.texture.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:12: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 305
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.sampler.transform.frag.out b/Test/baseResults/spv.texture.sampler.transform.frag.out
index a297ea7..4e9534e 100644
--- a/Test/baseResults/spv.texture.sampler.transform.frag.out
+++ b/Test/baseResults/spv.texture.sampler.transform.frag.out
@@ -1,6 +1,6 @@
 spv.texture.sampler.transform.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
index 544a0f3..35053f3 100644
--- a/Test/baseResults/spv.texture.vert.out
+++ b/Test/baseResults/spv.texture.vert.out
@@ -1,6 +1,6 @@
 spv.texture.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 150
 
                               Capability Shader
diff --git a/Test/baseResults/spv.textureBuffer.vert.out b/Test/baseResults/spv.textureBuffer.vert.out
index d18c656..f5b271f 100644
--- a/Test/baseResults/spv.textureBuffer.vert.out
+++ b/Test/baseResults/spv.textureBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.textureBuffer.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.textureError.frag.out b/Test/baseResults/spv.textureError.frag.out
new file mode 100644
index 0000000..d5ef59c
--- /dev/null
+++ b/Test/baseResults/spv.textureError.frag.out
@@ -0,0 +1,6 @@
+spv.textureError.frag
+ERROR: spv.textureError.frag:8: 'texture*D*' : function not supported in this version; use texture() instead 
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.textureGatherBiasLod.frag.out b/Test/baseResults/spv.textureGatherBiasLod.frag.out
index 3a9bb80..f47e16a 100644
--- a/Test/baseResults/spv.textureGatherBiasLod.frag.out
+++ b/Test/baseResults/spv.textureGatherBiasLod.frag.out
@@ -1,6 +1,6 @@
 spv.textureGatherBiasLod.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 298
 
                               Capability Shader
diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
index 3e35da2..6a0e0f0 100644
--- a/Test/baseResults/spv.types.frag.out
+++ b/Test/baseResults/spv.types.frag.out
@@ -1,6 +1,6 @@
 spv.types.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 260
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index 7dbc3b3..a78acae 100644
--- a/Test/baseResults/spv.uint.frag.out
+++ b/Test/baseResults/spv.uint.frag.out
@@ -1,6 +1,6 @@
 spv.uint.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 213
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
index fa66f2b..09cd353 100644
--- a/Test/baseResults/spv.uniformArray.frag.out
+++ b/Test/baseResults/spv.uniformArray.frag.out
@@ -1,6 +1,6 @@
 spv.uniformArray.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uniformInitializer.frag.out b/Test/baseResults/spv.uniformInitializer.frag.out
index 63595ae..abebf62 100644
--- a/Test/baseResults/spv.uniformInitializer.frag.out
+++ b/Test/baseResults/spv.uniformInitializer.frag.out
@@ -1,6 +1,6 @@
 spv.uniformInitializer.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uniformInitializerStruct.frag.out b/Test/baseResults/spv.uniformInitializerStruct.frag.out
index 5ce854d..058bc34 100644
--- a/Test/baseResults/spv.uniformInitializerStruct.frag.out
+++ b/Test/baseResults/spv.uniformInitializerStruct.frag.out
@@ -1,6 +1,6 @@
 spv.uniformInitializerStruct.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/spv.unit1.frag.out b/Test/baseResults/spv.unit1.frag.out
index 02ddfec..b4de7bd 100644
--- a/Test/baseResults/spv.unit1.frag.out
+++ b/Test/baseResults/spv.unit1.frag.out
@@ -193,7 +193,7 @@
 0:?     'h3' ( global highp float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 69
 
                               Capability Shader
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
index ee57d43..f78119c 100644
--- a/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -1,6 +1,6 @@
 spv.variableArrayIndex.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 93
 
                               Capability Shader
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
index 1e6334a..9d001bc 100644
--- a/Test/baseResults/spv.varyingArray.frag.out
+++ b/Test/baseResults/spv.varyingArray.frag.out
@@ -1,6 +1,6 @@
 spv.varyingArray.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
index ac9d192..00135f6 100644
--- a/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -1,6 +1,6 @@
 spv.varyingArrayIndirect.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vecMatConstruct.frag.out b/Test/baseResults/spv.vecMatConstruct.frag.out
index bfe5ae7..5f3a233 100644
--- a/Test/baseResults/spv.vecMatConstruct.frag.out
+++ b/Test/baseResults/spv.vecMatConstruct.frag.out
@@ -1,6 +1,6 @@
 spv.vecMatConstruct.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out
index e95ada4..f719a97 100644
--- a/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/Test/baseResults/spv.viewportArray2.tesc.out
@@ -1,6 +1,6 @@
 spv.viewportArray2.tesc
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 23
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.viewportArray2.vert.out b/Test/baseResults/spv.viewportArray2.vert.out
index cf29cd7..d916b4d 100644
--- a/Test/baseResults/spv.viewportArray2.vert.out
+++ b/Test/baseResults/spv.viewportArray2.vert.out
@@ -1,6 +1,6 @@
 spv.viewportArray2.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.viewportindex.tese.out b/Test/baseResults/spv.viewportindex.tese.out
index 12a30cf..46b1faa 100644
--- a/Test/baseResults/spv.viewportindex.tese.out
+++ b/Test/baseResults/spv.viewportindex.tese.out
@@ -1,6 +1,6 @@
 spv.viewportindex.tese
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 10
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out
index c77285b..4a0cc26 100644
--- a/Test/baseResults/spv.voidFunction.frag.out
+++ b/Test/baseResults/spv.voidFunction.frag.out
@@ -1,6 +1,6 @@
 spv.voidFunction.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.volatileAtomic.comp.out b/Test/baseResults/spv.volatileAtomic.comp.out
index 0364d90..53673d3 100644
--- a/Test/baseResults/spv.volatileAtomic.comp.out
+++ b/Test/baseResults/spv.volatileAtomic.comp.out
@@ -1,6 +1,6 @@
 spv.volatileAtomic.comp
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out
index 47388a2..d5c83d5 100644
--- a/Test/baseResults/spv.vulkan110.int16.frag.out
+++ b/Test/baseResults/spv.vulkan110.int16.frag.out
@@ -1,6 +1,6 @@
 spv.vulkan110.int16.frag
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 535
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
index 0774960..ab88c58 100644
--- a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
+++ b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.vulkan110.storageBuffer.vert
 // Module Version 10300
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out
index 246e5fd..7a0bfb0 100644
--- a/Test/baseResults/spv.while-continue-break.vert.out
+++ b/Test/baseResults/spv.while-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.while-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 41
 
                               Capability Shader
diff --git a/Test/baseResults/spv.while-simple.vert.out b/Test/baseResults/spv.while-simple.vert.out
index 894dea1..922860f 100644
--- a/Test/baseResults/spv.while-simple.vert.out
+++ b/Test/baseResults/spv.while-simple.vert.out
@@ -1,6 +1,6 @@
 spv.while-simple.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out
index 6155f7b..b796b29 100644
--- a/Test/baseResults/spv.whileLoop.frag.out
+++ b/Test/baseResults/spv.whileLoop.frag.out
@@ -1,6 +1,6 @@
 spv.whileLoop.frag
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb.vert.out b/Test/baseResults/spv.xfb.vert.out
index 3fdc60b..4283e20 100644
--- a/Test/baseResults/spv.xfb.vert.out
+++ b/Test/baseResults/spv.xfb.vert.out
@@ -1,6 +1,6 @@
 spv.xfb.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb2.vert.out b/Test/baseResults/spv.xfb2.vert.out
index cbb8fc6..b4b09bd 100644
--- a/Test/baseResults/spv.xfb2.vert.out
+++ b/Test/baseResults/spv.xfb2.vert.out
@@ -1,6 +1,6 @@
 spv.xfb2.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb3.vert.out b/Test/baseResults/spv.xfb3.vert.out
index ef53b9a..a7e8856 100644
--- a/Test/baseResults/spv.xfb3.vert.out
+++ b/Test/baseResults/spv.xfb3.vert.out
@@ -1,6 +1,6 @@
 spv.xfb3.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
index e2c6093..eb91100 100644
--- a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
+++ b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
@@ -1,6 +1,6 @@
 spv.xfbOffsetOnBlockMembersAssignment.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
index 499ac8c..467a5ae 100644
--- a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
+++ b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
@@ -1,6 +1,6 @@
 spv.xfbOffsetOnStructMembersAssignment.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
index f7476c7..633558d 100644
--- a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
+++ b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
@@ -1,6 +1,6 @@
 spv.xfbOverlapOffsetCheckWithBlockAndMember.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbStrideJustOnce.vert.out b/Test/baseResults/spv.xfbStrideJustOnce.vert.out
index bbd7768..8bf1f0d 100644
--- a/Test/baseResults/spv.xfbStrideJustOnce.vert.out
+++ b/Test/baseResults/spv.xfbStrideJustOnce.vert.out
@@ -1,6 +1,6 @@
 spv.xfbStrideJustOnce.vert
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/test.conf b/Test/baseResults/test.conf
index 98b2a84..e4cf409 100644
--- a/Test/baseResults/test.conf
+++ b/Test/baseResults/test.conf
@@ -90,6 +90,15 @@
 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
diff --git a/Test/baseResults/textureQueryLOD.frag.out b/Test/baseResults/textureQueryLOD.frag.out
new file mode 100644
index 0000000..b565a00
--- /dev/null
+++ b/Test/baseResults/textureQueryLOD.frag.out
@@ -0,0 +1,115 @@
+textureQueryLOD.frag
+WARNING: 0:7: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
+
+Shader version: 150
+Requested GL_ARB_gpu_shader5
+Requested GL_ARB_texture_query_lod
+0:? Sequence
+0:24  Function Definition: main( ( global void)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      switch
+0:26      condition
+0:26        'funct' ( uniform int)
+0:26      body
+0:26        Sequence
+0:28          case:  with expression
+0:28            Constant:
+0:28              0 (const int)
+0:?           Sequence
+0:29            Sequence
+0:29              move second child to first child ( temp 2-component vector of int)
+0:29                'iv2' ( temp 2-component vector of int)
+0:29                textureSize ( global 2-component vector of int)
+0:29                  'sampler' ( uniform sampler2DShadow)
+0:29                  Constant:
+0:29                    0 (const int)
+0:31            Sequence
+0:31              move second child to first child ( temp 2-component vector of float)
+0:31                'fv2' ( temp 2-component vector of float)
+0:31                textureQueryLod ( global 2-component vector of float)
+0:31                  'sampler' ( uniform sampler2DShadow)
+0:31                  Constant:
+0:31                    0.000000
+0:31                    0.000000
+0:33            move second child to first child ( temp 4-component vector of float)
+0:33              'color' ( out 4-component vector of float)
+0:33              Construct vec4 ( temp 4-component vector of float)
+0:33                Convert int to float ( temp 2-component vector of float)
+0:33                  'iv2' ( temp 2-component vector of int)
+0:33                'fv2' ( temp 2-component vector of float)
+0:34            Branch: Break
+0:35          default: 
+0:?           Sequence
+0:36            move second child to first child ( temp 4-component vector of float)
+0:36              'color' ( out 4-component vector of float)
+0:36              Constant:
+0:36                1.000000
+0:36                1.000000
+0:36                1.000000
+0:36                1.000000
+0:37            Branch: Break
+0:?   Linker Objects
+0:?     'vUV' ( smooth in 2-component vector of float)
+0:?     'color' ( out 4-component vector of float)
+0:?     'sampler' ( uniform sampler2DShadow)
+0:?     'funct' ( uniform int)
+
+
+Linked fragment stage:
+
+
+Shader version: 150
+Requested GL_ARB_gpu_shader5
+Requested GL_ARB_texture_query_lod
+0:? Sequence
+0:24  Function Definition: main( ( global void)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      switch
+0:26      condition
+0:26        'funct' ( uniform int)
+0:26      body
+0:26        Sequence
+0:28          case:  with expression
+0:28            Constant:
+0:28              0 (const int)
+0:?           Sequence
+0:29            Sequence
+0:29              move second child to first child ( temp 2-component vector of int)
+0:29                'iv2' ( temp 2-component vector of int)
+0:29                textureSize ( global 2-component vector of int)
+0:29                  'sampler' ( uniform sampler2DShadow)
+0:29                  Constant:
+0:29                    0 (const int)
+0:31            Sequence
+0:31              move second child to first child ( temp 2-component vector of float)
+0:31                'fv2' ( temp 2-component vector of float)
+0:31                textureQueryLod ( global 2-component vector of float)
+0:31                  'sampler' ( uniform sampler2DShadow)
+0:31                  Constant:
+0:31                    0.000000
+0:31                    0.000000
+0:33            move second child to first child ( temp 4-component vector of float)
+0:33              'color' ( out 4-component vector of float)
+0:33              Construct vec4 ( temp 4-component vector of float)
+0:33                Convert int to float ( temp 2-component vector of float)
+0:33                  'iv2' ( temp 2-component vector of int)
+0:33                'fv2' ( temp 2-component vector of float)
+0:34            Branch: Break
+0:35          default: 
+0:?           Sequence
+0:36            move second child to first child ( temp 4-component vector of float)
+0:36              'color' ( out 4-component vector of float)
+0:36              Constant:
+0:36                1.000000
+0:36                1.000000
+0:36                1.000000
+0:36                1.000000
+0:37            Branch: Break
+0:?   Linker Objects
+0:?     'vUV' ( smooth in 2-component vector of float)
+0:?     'color' ( out 4-component vector of float)
+0:?     'sampler' ( uniform sampler2DShadow)
+0:?     'funct' ( uniform int)
+
diff --git a/Test/baseResults/vk.relaxed.changeSet.vert.out b/Test/baseResults/vk.relaxed.changeSet.vert.out
index d2beff9..d7502a3 100755
--- a/Test/baseResults/vk.relaxed.changeSet.vert.out
+++ b/Test/baseResults/vk.relaxed.changeSet.vert.out
@@ -139,7 +139,7 @@
 0:?     'UV' ( smooth in highp 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 46
 
                               Capability Shader
@@ -232,7 +232,7 @@
                               Return
                               FunctionEnd
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/vk.relaxed.frag.out b/Test/baseResults/vk.relaxed.frag.out
index d98910e..c88782f 100644
--- a/Test/baseResults/vk.relaxed.frag.out
+++ b/Test/baseResults/vk.relaxed.frag.out
@@ -553,7 +553,7 @@
 0:?     'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 163
 
                               Capability Shader
diff --git a/Test/baseResults/vk.relaxed.link1.frag.out b/Test/baseResults/vk.relaxed.link1.frag.out
index 9dac4c6..1e67646 100644
--- a/Test/baseResults/vk.relaxed.link1.frag.out
+++ b/Test/baseResults/vk.relaxed.link1.frag.out
@@ -348,7 +348,7 @@
 0:?     'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2,  coherent volatile buffer highp uint counter3})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 105
 
                               Capability Shader
diff --git a/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out b/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out
new file mode 100755
index 0000000..37532ed
--- /dev/null
+++ b/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out
@@ -0,0 +1,10697 @@
+vk.relaxed.stagelink.0.0.vert
+Shader version: 460
+0:? Sequence
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:15    Sequence
+0:15      Sequence
+0:15        Sequence
+0:15          move second child to first child ( temp highp 3-component vector of float)
+0:15            'texcoord' ( temp highp 3-component vector of float)
+0:15            Function Call: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float)
+0:15              direct index (layout( location=3) temp highp 3-component vector of float)
+0:15                'uv' (layout( location=3) in 8-element array of highp 3-component vector of float)
+0:15                Constant:
+0:15                  0 (const int)
+0:16        move second child to first child ( temp highp 3-component vector of float)
+0:16          vector swizzle ( temp highp 3-component vector of float)
+0:16            texCoord0: direct index for structure ( out highp 3-component vector of float)
+0:16              'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:16              Constant:
+0:16                2 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16              Constant:
+0:16                2 (const int)
+0:16          vector swizzle ( temp highp 3-component vector of float)
+0:16            'texcoord' ( temp highp 3-component vector of float)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16              Constant:
+0:16                2 (const int)
+0:20      move second child to first child ( temp highp int)
+0:20        instance: direct index for structure ( flat out highp int)
+0:20          'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:20          Constant:
+0:20            4 (const int)
+0:20        Function Call: TDInstanceID( ( global highp int)
+0:21      Sequence
+0:21        move second child to first child ( temp highp 4-component vector of float)
+0:21          'worldSpacePos' ( temp highp 4-component vector of float)
+0:21          Function Call: TDDeform(vf3; ( global highp 4-component vector of float)
+0:21            'P' (layout( location=0) in highp 3-component vector of float)
+0:22      Sequence
+0:22        move second child to first child ( temp highp 3-component vector of float)
+0:22          'uvUnwrapCoord' ( temp highp 3-component vector of float)
+0:22          Function Call: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float)
+0:22            Function Call: TDUVUnwrapCoord( ( global highp 3-component vector of float)
+0:23      move second child to first child ( temp highp 4-component vector of float)
+0:23        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:23          'anon@4' ( 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:23          Constant:
+0:23            0 (const uint)
+0:23        Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float)
+0:23          'worldSpacePos' ( temp highp 4-component vector of float)
+0:23          'uvUnwrapCoord' ( temp highp 3-component vector of float)
+0:32      Sequence
+0:32        move second child to first child ( temp highp int)
+0:32          'cameraIndex' ( temp highp int)
+0:32          Function Call: TDCameraIndex( ( global highp int)
+0:33      move second child to first child ( temp highp int)
+0:33        cameraIndex: direct index for structure ( flat out highp int)
+0:33          'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:33          Constant:
+0:33            3 (const int)
+0:33        'cameraIndex' ( temp highp int)
+0:34      move second child to first child ( temp highp 3-component vector of float)
+0:34        vector swizzle ( temp highp 3-component vector of float)
+0:34          worldSpacePos: direct index for structure ( out highp 3-component vector of float)
+0:34            'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34            Constant:
+0:34              2 (const int)
+0:34        vector swizzle ( temp highp 3-component vector of float)
+0:34          'worldSpacePos' ( temp highp 4-component vector of float)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34            Constant:
+0:34              2 (const int)
+0:35      move second child to first child ( temp highp 4-component vector of float)
+0:35        color: direct index for structure ( out highp 4-component vector of float)
+0:35          'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:35          Constant:
+0:35            0 (const int)
+0:35        Function Call: TDInstanceColor(vf4; ( global highp 4-component vector of float)
+0:35          'Cd' (layout( location=2) in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor,  global highp int renderTOPCameraIndex} uTDCamInfos})
+0:?     'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float viewport,  global highp 4-component vector of float viewportRes,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor} uTDGeneral})
+0:?     'P' (layout( location=0) in highp 3-component vector of float)
+0:?     'N' (layout( location=1) in highp 3-component vector of float)
+0:?     'Cd' (layout( location=2) in highp 4-component vector of float)
+0:?     'uv' (layout( location=3) in 8-element array of highp 3-component vector of float)
+0:?     'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:?     'anon@4' ( 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:?     'gl_VertexIndex' ( in int VertexIndex)
+0:?     'gl_InstanceIndex' ( in int InstanceIndex)
+
+vk.relaxed.stagelink.0.1.vert
+Shader version: 460
+0:? Sequence
+0:176  Function Definition: iTDCamToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float)
+0:176    Function Parameters: 
+0:176      'v' ( in highp 4-component vector of float)
+0:176      'uv' ( in highp 3-component vector of float)
+0:176      'cameraIndex' ( in highp int)
+0:176      'applyPickMod' ( in bool)
+0:178    Sequence
+0:178      Test condition and select ( temp void)
+0:178        Condition
+0:178        Negate conditional ( temp bool)
+0:178          Function Call: TDInstanceActive( ( global bool)
+0:178        true case
+0:179        Branch: Return with expression
+0:179          Constant:
+0:179            2.000000
+0:179            2.000000
+0:179            2.000000
+0:179            0.000000
+0:180      move second child to first child ( temp highp 4-component vector of float)
+0:180        'v' ( in highp 4-component vector of float)
+0:180        matrix-times-vector ( temp highp 4-component vector of float)
+0:180          proj: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float)
+0:180            direct index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:180              uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:180                'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:180                Constant:
+0:180                  0 (const uint)
+0:180              Constant:
+0:180                0 (const int)
+0:180            Constant:
+0:180              8 (const int)
+0:180          'v' ( in highp 4-component vector of float)
+0:181      Branch: Return with expression
+0:181        'v' ( in highp 4-component vector of float)
+0:183  Function Definition: iTDWorldToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float)
+0:183    Function Parameters: 
+0:183      'v' ( in highp 4-component vector of float)
+0:183      'uv' ( in highp 3-component vector of float)
+0:183      'cameraIndex' ( in highp int)
+0:183      'applyPickMod' ( in bool)
+0:184    Sequence
+0:184      Test condition and select ( temp void)
+0:184        Condition
+0:184        Negate conditional ( temp bool)
+0:184          Function Call: TDInstanceActive( ( global bool)
+0:184        true case
+0:185        Branch: Return with expression
+0:185          Constant:
+0:185            2.000000
+0:185            2.000000
+0:185            2.000000
+0:185            0.000000
+0:186      move second child to first child ( temp highp 4-component vector of float)
+0:186        'v' ( in highp 4-component vector of float)
+0:186        matrix-times-vector ( temp highp 4-component vector of float)
+0:186          camProj: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float)
+0:186            direct index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:186              uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:186                'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:186                Constant:
+0:186                  0 (const uint)
+0:186              Constant:
+0:186                0 (const int)
+0:186            Constant:
+0:186              6 (const int)
+0:186          'v' ( in highp 4-component vector of float)
+0:187      Branch: Return with expression
+0:187        'v' ( in highp 4-component vector of float)
+0:193  Function Definition: TDInstanceID( ( global highp int)
+0:193    Function Parameters: 
+0:194    Sequence
+0:194      Branch: Return with expression
+0:194        add ( temp highp int)
+0:194          'gl_InstanceIndex' ( in highp int InstanceIndex)
+0:194          uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:194            'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:194            Constant:
+0:194              0 (const uint)
+0:196  Function Definition: TDCameraIndex( ( global highp int)
+0:196    Function Parameters: 
+0:197    Sequence
+0:197      Branch: Return with expression
+0:197        Constant:
+0:197          0 (const int)
+0:199  Function Definition: TDUVUnwrapCoord( ( global highp 3-component vector of float)
+0:199    Function Parameters: 
+0:200    Sequence
+0:200      Branch: Return with expression
+0:200        direct index (layout( location=3) temp highp 3-component vector of float)
+0:200          'uv' (layout( location=3) in 8-element array of highp 3-component vector of float)
+0:200          Constant:
+0:200            0 (const int)
+0:205  Function Definition: TDPickID( ( global highp int)
+0:205    Function Parameters: 
+0:209    Sequence
+0:209      Branch: Return with expression
+0:209        Constant:
+0:209          0 (const int)
+0:212  Function Definition: iTDConvertPickId(i1; ( global highp float)
+0:212    Function Parameters: 
+0:212      'id' ( in highp int)
+0:213    Sequence
+0:213      or second child into first child ( temp highp int)
+0:213        'id' ( in highp int)
+0:213        Constant:
+0:213          1073741824 (const int)
+0:214      Branch: Return with expression
+0:214        intBitsToFloat ( global highp float)
+0:214          'id' ( in highp int)
+0:217  Function Definition: TDWritePickingValues( ( global void)
+0:217    Function Parameters: 
+0:224  Function Definition: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float)
+0:224    Function Parameters: 
+0:224      'v' ( in highp 4-component vector of float)
+0:224      'uv' ( in highp 3-component vector of float)
+0:226    Sequence
+0:226      Branch: Return with expression
+0:226        Function Call: iTDWorldToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float)
+0:226          'v' ( in highp 4-component vector of float)
+0:226          'uv' ( in highp 3-component vector of float)
+0:226          Function Call: TDCameraIndex( ( global highp int)
+0:226          Constant:
+0:226            true (const bool)
+0:228  Function Definition: TDWorldToProj(vf3;vf3; ( global highp 4-component vector of float)
+0:228    Function Parameters: 
+0:228      'v' ( in highp 3-component vector of float)
+0:228      'uv' ( in highp 3-component vector of float)
+0:230    Sequence
+0:230      Branch: Return with expression
+0:230        Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float)
+0:230          Construct vec4 ( temp highp 4-component vector of float)
+0:230            'v' ( in highp 3-component vector of float)
+0:230            Constant:
+0:230              1.000000
+0:230          'uv' ( in highp 3-component vector of float)
+0:232  Function Definition: TDWorldToProj(vf4; ( global highp 4-component vector of float)
+0:232    Function Parameters: 
+0:232      'v' ( in highp 4-component vector of float)
+0:234    Sequence
+0:234      Branch: Return with expression
+0:234        Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float)
+0:234          'v' ( in highp 4-component vector of float)
+0:234          Constant:
+0:234            0.000000
+0:234            0.000000
+0:234            0.000000
+0:236  Function Definition: TDWorldToProj(vf3; ( global highp 4-component vector of float)
+0:236    Function Parameters: 
+0:236      'v' ( in highp 3-component vector of float)
+0:238    Sequence
+0:238      Branch: Return with expression
+0:238        Function Call: TDWorldToProj(vf4; ( global highp 4-component vector of float)
+0:238          Construct vec4 ( temp highp 4-component vector of float)
+0:238            'v' ( in highp 3-component vector of float)
+0:238            Constant:
+0:238              1.000000
+0:240  Function Definition: TDPointColor( ( global highp 4-component vector of float)
+0:240    Function Parameters: 
+0:241    Sequence
+0:241      Branch: Return with expression
+0:241        'Cd' (layout( location=2) in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'P' (layout( location=0) in highp 3-component vector of float)
+0:?     'N' (layout( location=1) in highp 3-component vector of float)
+0:?     'Cd' (layout( location=2) in highp 4-component vector of float)
+0:?     'uv' (layout( location=3) in 8-element array of highp 3-component vector of float)
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position,  global highp 3-component vector of float direction,  global highp 3-component vector of float diffuse,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float lightSize,  global highp 4-component vector of float misc,  global highp 4-component vector of float coneLookupScaleBias,  global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix,  global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights})
+0:?     'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs})
+0:?     'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:?     'anon@4' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor,  global highp int renderTOPCameraIndex} uTDCamInfos})
+0:?     'anon@5' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float viewport,  global highp 4-component vector of float viewportRes,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor} uTDGeneral})
+0:?     'mTD2DImageOutputs' (layout( rgba8) uniform 1-element array of highp image2D)
+0:?     'mTD2DArrayImageOutputs' (layout( rgba8) uniform 1-element array of highp image2DArray)
+0:?     'mTD3DImageOutputs' (layout( rgba8) uniform 1-element array of highp image3D)
+0:?     'mTDCubeImageOutputs' (layout( rgba8) uniform 1-element array of highp imageCube)
+0:?     'gl_VertexIndex' ( in int VertexIndex)
+0:?     'gl_InstanceIndex' ( in int InstanceIndex)
+
+vk.relaxed.stagelink.0.2.vert
+Shader version: 460
+0:? Sequence
+0:114  Function Definition: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float)
+0:114    Function Parameters: 
+0:114      'index' ( in highp int)
+0:114      't' ( in highp 3-component vector of float)
+0:?     Sequence
+0:116      Sequence
+0:116        move second child to first child ( temp highp int)
+0:116          'coord' ( temp highp int)
+0:116          'index' ( in highp int)
+0:117      Sequence
+0:117        move second child to first child ( temp highp 4-component vector of float)
+0:117          'samp' ( temp highp 4-component vector of float)
+0:117          textureFetch ( global highp 4-component vector of float)
+0:117            'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer)
+0:117            'coord' ( temp highp int)
+0:118      move second child to first child ( temp highp float)
+0:118        direct index ( temp highp float)
+0:118          'v' ( temp highp 3-component vector of float)
+0:118          Constant:
+0:118            0 (const int)
+0:118        direct index ( temp highp float)
+0:118          't' ( in highp 3-component vector of float)
+0:118          Constant:
+0:118            0 (const int)
+0:119      move second child to first child ( temp highp float)
+0:119        direct index ( temp highp float)
+0:119          'v' ( temp highp 3-component vector of float)
+0:119          Constant:
+0:119            1 (const int)
+0:119        direct index ( temp highp float)
+0:119          't' ( in highp 3-component vector of float)
+0:119          Constant:
+0:119            1 (const int)
+0:120      move second child to first child ( temp highp float)
+0:120        direct index ( temp highp float)
+0:120          'v' ( temp highp 3-component vector of float)
+0:120          Constant:
+0:120            2 (const int)
+0:120        direct index ( temp highp float)
+0:120          'samp' ( temp highp 4-component vector of float)
+0:120          Constant:
+0:120            0 (const int)
+0:121      move second child to first child ( temp highp 3-component vector of float)
+0:121        vector swizzle ( temp highp 3-component vector of float)
+0:121          't' ( in highp 3-component vector of float)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:121        vector swizzle ( temp highp 3-component vector of float)
+0:121          'v' ( temp highp 3-component vector of float)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:122      Branch: Return with expression
+0:122        't' ( in highp 3-component vector of float)
+0:124  Function Definition: TDInstanceActive(i1; ( global bool)
+0:124    Function Parameters: 
+0:124      'index' ( in highp int)
+0:125    Sequence
+0:125      subtract second child into first child ( temp highp int)
+0:125        'index' ( in highp int)
+0:125        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:125          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:125          Constant:
+0:125            0 (const uint)
+0:127      Sequence
+0:127        move second child to first child ( temp highp int)
+0:127          'coord' ( temp highp int)
+0:127          'index' ( in highp int)
+0:128      Sequence
+0:128        move second child to first child ( temp highp 4-component vector of float)
+0:128          'samp' ( temp highp 4-component vector of float)
+0:128          textureFetch ( global highp 4-component vector of float)
+0:128            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:128            'coord' ( temp highp int)
+0:129      move second child to first child ( temp highp float)
+0:129        'v' ( temp highp float)
+0:129        direct index ( temp highp float)
+0:129          'samp' ( temp highp 4-component vector of float)
+0:129          Constant:
+0:129            0 (const int)
+0:130      Branch: Return with expression
+0:130        Compare Not Equal ( temp bool)
+0:130          'v' ( temp highp float)
+0:130          Constant:
+0:130            0.000000
+0:132  Function Definition: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float)
+0:132    Function Parameters: 
+0:132      'index' ( in highp int)
+0:132      'instanceActive' ( out bool)
+0:133    Sequence
+0:133      Sequence
+0:133        move second child to first child ( temp highp int)
+0:133          'origIndex' ( temp highp int)
+0:133          'index' ( in highp int)
+0:134      subtract second child into first child ( temp highp int)
+0:134        'index' ( in highp int)
+0:134        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:134          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:134          Constant:
+0:134            0 (const uint)
+0:136      Sequence
+0:136        move second child to first child ( temp highp int)
+0:136          'coord' ( temp highp int)
+0:136          'index' ( in highp int)
+0:137      Sequence
+0:137        move second child to first child ( temp highp 4-component vector of float)
+0:137          'samp' ( temp highp 4-component vector of float)
+0:137          textureFetch ( global highp 4-component vector of float)
+0:137            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:137            'coord' ( temp highp int)
+0:138      move second child to first child ( temp highp float)
+0:138        direct index ( temp highp float)
+0:138          'v' ( temp highp 3-component vector of float)
+0:138          Constant:
+0:138            0 (const int)
+0:138        direct index ( temp highp float)
+0:138          'samp' ( temp highp 4-component vector of float)
+0:138          Constant:
+0:138            1 (const int)
+0:139      move second child to first child ( temp highp float)
+0:139        direct index ( temp highp float)
+0:139          'v' ( temp highp 3-component vector of float)
+0:139          Constant:
+0:139            1 (const int)
+0:139        direct index ( temp highp float)
+0:139          'samp' ( temp highp 4-component vector of float)
+0:139          Constant:
+0:139            2 (const int)
+0:140      move second child to first child ( temp highp float)
+0:140        direct index ( temp highp float)
+0:140          'v' ( temp highp 3-component vector of float)
+0:140          Constant:
+0:140            2 (const int)
+0:140        direct index ( temp highp float)
+0:140          'samp' ( temp highp 4-component vector of float)
+0:140          Constant:
+0:140            3 (const int)
+0:141      move second child to first child ( temp bool)
+0:141        'instanceActive' ( out bool)
+0:141        Compare Not Equal ( temp bool)
+0:141          direct index ( temp highp float)
+0:141            'samp' ( temp highp 4-component vector of float)
+0:141            Constant:
+0:141              0 (const int)
+0:141          Constant:
+0:141            0.000000
+0:142      Branch: Return with expression
+0:142        'v' ( temp highp 3-component vector of float)
+0:144  Function Definition: TDInstanceTranslate(i1; ( global highp 3-component vector of float)
+0:144    Function Parameters: 
+0:144      'index' ( in highp int)
+0:145    Sequence
+0:145      subtract second child into first child ( temp highp int)
+0:145        'index' ( in highp int)
+0:145        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:145          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:145          Constant:
+0:145            0 (const uint)
+0:147      Sequence
+0:147        move second child to first child ( temp highp int)
+0:147          'coord' ( temp highp int)
+0:147          'index' ( in highp int)
+0:148      Sequence
+0:148        move second child to first child ( temp highp 4-component vector of float)
+0:148          'samp' ( temp highp 4-component vector of float)
+0:148          textureFetch ( global highp 4-component vector of float)
+0:148            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:148            'coord' ( temp highp int)
+0:149      move second child to first child ( temp highp float)
+0:149        direct index ( temp highp float)
+0:149          'v' ( temp highp 3-component vector of float)
+0:149          Constant:
+0:149            0 (const int)
+0:149        direct index ( temp highp float)
+0:149          'samp' ( temp highp 4-component vector of float)
+0:149          Constant:
+0:149            1 (const int)
+0:150      move second child to first child ( temp highp float)
+0:150        direct index ( temp highp float)
+0:150          'v' ( temp highp 3-component vector of float)
+0:150          Constant:
+0:150            1 (const int)
+0:150        direct index ( temp highp float)
+0:150          'samp' ( temp highp 4-component vector of float)
+0:150          Constant:
+0:150            2 (const int)
+0:151      move second child to first child ( temp highp float)
+0:151        direct index ( temp highp float)
+0:151          'v' ( temp highp 3-component vector of float)
+0:151          Constant:
+0:151            2 (const int)
+0:151        direct index ( temp highp float)
+0:151          'samp' ( temp highp 4-component vector of float)
+0:151          Constant:
+0:151            3 (const int)
+0:152      Branch: Return with expression
+0:152        'v' ( temp highp 3-component vector of float)
+0:154  Function Definition: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float)
+0:154    Function Parameters: 
+0:154      'index' ( in highp int)
+0:155    Sequence
+0:155      subtract second child into first child ( temp highp int)
+0:155        'index' ( in highp int)
+0:155        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:155          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:155          Constant:
+0:155            0 (const uint)
+0:156      Sequence
+0:156        move second child to first child ( temp highp 3-component vector of float)
+0:156          'v' ( temp highp 3-component vector of float)
+0:156          Constant:
+0:156            0.000000
+0:156            0.000000
+0:156            0.000000
+0:157      Sequence
+0:157        move second child to first child ( temp highp 3X3 matrix of float)
+0:157          'm' ( temp highp 3X3 matrix of float)
+0:157          Constant:
+0:157            1.000000
+0:157            0.000000
+0:157            0.000000
+0:157            0.000000
+0:157            1.000000
+0:157            0.000000
+0:157            0.000000
+0:157            0.000000
+0:157            1.000000
+0:161      Branch: Return with expression
+0:161        'm' ( temp highp 3X3 matrix of float)
+0:163  Function Definition: TDInstanceScale(i1; ( global highp 3-component vector of float)
+0:163    Function Parameters: 
+0:163      'index' ( in highp int)
+0:164    Sequence
+0:164      subtract second child into first child ( temp highp int)
+0:164        'index' ( in highp int)
+0:164        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:164          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:164          Constant:
+0:164            0 (const uint)
+0:165      Sequence
+0:165        move second child to first child ( temp highp 3-component vector of float)
+0:165          'v' ( temp highp 3-component vector of float)
+0:165          Constant:
+0:165            1.000000
+0:165            1.000000
+0:165            1.000000
+0:166      Branch: Return with expression
+0:166        'v' ( temp highp 3-component vector of float)
+0:168  Function Definition: TDInstancePivot(i1; ( global highp 3-component vector of float)
+0:168    Function Parameters: 
+0:168      'index' ( in highp int)
+0:169    Sequence
+0:169      subtract second child into first child ( temp highp int)
+0:169        'index' ( in highp int)
+0:169        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:169          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:169          Constant:
+0:169            0 (const uint)
+0:170      Sequence
+0:170        move second child to first child ( temp highp 3-component vector of float)
+0:170          'v' ( temp highp 3-component vector of float)
+0:170          Constant:
+0:170            0.000000
+0:170            0.000000
+0:170            0.000000
+0:171      Branch: Return with expression
+0:171        'v' ( temp highp 3-component vector of float)
+0:173  Function Definition: TDInstanceRotTo(i1; ( global highp 3-component vector of float)
+0:173    Function Parameters: 
+0:173      'index' ( in highp int)
+0:174    Sequence
+0:174      subtract second child into first child ( temp highp int)
+0:174        'index' ( in highp int)
+0:174        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:174          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:174          Constant:
+0:174            0 (const uint)
+0:175      Sequence
+0:175        move second child to first child ( temp highp 3-component vector of float)
+0:175          'v' ( temp highp 3-component vector of float)
+0:175          Constant:
+0:175            0.000000
+0:175            0.000000
+0:175            1.000000
+0:176      Branch: Return with expression
+0:176        'v' ( temp highp 3-component vector of float)
+0:178  Function Definition: TDInstanceRotUp(i1; ( global highp 3-component vector of float)
+0:178    Function Parameters: 
+0:178      'index' ( in highp int)
+0:179    Sequence
+0:179      subtract second child into first child ( temp highp int)
+0:179        'index' ( in highp int)
+0:179        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:179          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:179          Constant:
+0:179            0 (const uint)
+0:180      Sequence
+0:180        move second child to first child ( temp highp 3-component vector of float)
+0:180          'v' ( temp highp 3-component vector of float)
+0:180          Constant:
+0:180            0.000000
+0:180            1.000000
+0:180            0.000000
+0:181      Branch: Return with expression
+0:181        'v' ( temp highp 3-component vector of float)
+0:183  Function Definition: TDInstanceMat(i1; ( global highp 4X4 matrix of float)
+0:183    Function Parameters: 
+0:183      'id' ( in highp int)
+0:184    Sequence
+0:184      Sequence
+0:184        move second child to first child ( temp bool)
+0:184          'instanceActive' ( temp bool)
+0:184          Constant:
+0:184            true (const bool)
+0:185      Sequence
+0:185        move second child to first child ( temp highp 3-component vector of float)
+0:185          't' ( temp highp 3-component vector of float)
+0:185          Function Call: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float)
+0:185            'id' ( in highp int)
+0:185            'instanceActive' ( temp bool)
+0:186      Test condition and select ( temp void)
+0:186        Condition
+0:186        Negate conditional ( temp bool)
+0:186          'instanceActive' ( temp bool)
+0:186        true case
+0:188        Sequence
+0:188          Branch: Return with expression
+0:188            Constant:
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:190      Sequence
+0:190        move second child to first child ( temp highp 4X4 matrix of float)
+0:190          'm' ( temp highp 4X4 matrix of float)
+0:190          Constant:
+0:190            1.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            1.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            1.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            1.000000
+0:192      Sequence
+0:192        Sequence
+0:192          move second child to first child ( temp highp 3-component vector of float)
+0:192            'tt' ( temp highp 3-component vector of float)
+0:192            't' ( temp highp 3-component vector of float)
+0:193        add second child into first child ( temp highp float)
+0:193          direct index ( temp highp float)
+0:193            direct index ( temp highp 4-component vector of float)
+0:193              'm' ( temp highp 4X4 matrix of float)
+0:193              Constant:
+0:193                3 (const int)
+0:193            Constant:
+0:193              0 (const int)
+0:193          component-wise multiply ( temp highp float)
+0:193            direct index ( temp highp float)
+0:193              direct index ( temp highp 4-component vector of float)
+0:193                'm' ( temp highp 4X4 matrix of float)
+0:193                Constant:
+0:193                  0 (const int)
+0:193              Constant:
+0:193                0 (const int)
+0:193            direct index ( temp highp float)
+0:193              'tt' ( temp highp 3-component vector of float)
+0:193              Constant:
+0:193                0 (const int)
+0:194        add second child into first child ( temp highp float)
+0:194          direct index ( temp highp float)
+0:194            direct index ( temp highp 4-component vector of float)
+0:194              'm' ( temp highp 4X4 matrix of float)
+0:194              Constant:
+0:194                3 (const int)
+0:194            Constant:
+0:194              1 (const int)
+0:194          component-wise multiply ( temp highp float)
+0:194            direct index ( temp highp float)
+0:194              direct index ( temp highp 4-component vector of float)
+0:194                'm' ( temp highp 4X4 matrix of float)
+0:194                Constant:
+0:194                  0 (const int)
+0:194              Constant:
+0:194                1 (const int)
+0:194            direct index ( temp highp float)
+0:194              'tt' ( temp highp 3-component vector of float)
+0:194              Constant:
+0:194                0 (const int)
+0:195        add second child into first child ( temp highp float)
+0:195          direct index ( temp highp float)
+0:195            direct index ( temp highp 4-component vector of float)
+0:195              'm' ( temp highp 4X4 matrix of float)
+0:195              Constant:
+0:195                3 (const int)
+0:195            Constant:
+0:195              2 (const int)
+0:195          component-wise multiply ( temp highp float)
+0:195            direct index ( temp highp float)
+0:195              direct index ( temp highp 4-component vector of float)
+0:195                'm' ( temp highp 4X4 matrix of float)
+0:195                Constant:
+0:195                  0 (const int)
+0:195              Constant:
+0:195                2 (const int)
+0:195            direct index ( temp highp float)
+0:195              'tt' ( temp highp 3-component vector of float)
+0:195              Constant:
+0:195                0 (const int)
+0:196        add second child into first child ( temp highp float)
+0:196          direct index ( temp highp float)
+0:196            direct index ( temp highp 4-component vector of float)
+0:196              'm' ( temp highp 4X4 matrix of float)
+0:196              Constant:
+0:196                3 (const int)
+0:196            Constant:
+0:196              3 (const int)
+0:196          component-wise multiply ( temp highp float)
+0:196            direct index ( temp highp float)
+0:196              direct index ( temp highp 4-component vector of float)
+0:196                'm' ( temp highp 4X4 matrix of float)
+0:196                Constant:
+0:196                  0 (const int)
+0:196              Constant:
+0:196                3 (const int)
+0:196            direct index ( temp highp float)
+0:196              'tt' ( temp highp 3-component vector of float)
+0:196              Constant:
+0:196                0 (const int)
+0:197        add second child into first child ( temp highp float)
+0:197          direct index ( temp highp float)
+0:197            direct index ( temp highp 4-component vector of float)
+0:197              'm' ( temp highp 4X4 matrix of float)
+0:197              Constant:
+0:197                3 (const int)
+0:197            Constant:
+0:197              0 (const int)
+0:197          component-wise multiply ( temp highp float)
+0:197            direct index ( temp highp float)
+0:197              direct index ( temp highp 4-component vector of float)
+0:197                'm' ( temp highp 4X4 matrix of float)
+0:197                Constant:
+0:197                  1 (const int)
+0:197              Constant:
+0:197                0 (const int)
+0:197            direct index ( temp highp float)
+0:197              'tt' ( temp highp 3-component vector of float)
+0:197              Constant:
+0:197                1 (const int)
+0:198        add second child into first child ( temp highp float)
+0:198          direct index ( temp highp float)
+0:198            direct index ( temp highp 4-component vector of float)
+0:198              'm' ( temp highp 4X4 matrix of float)
+0:198              Constant:
+0:198                3 (const int)
+0:198            Constant:
+0:198              1 (const int)
+0:198          component-wise multiply ( temp highp float)
+0:198            direct index ( temp highp float)
+0:198              direct index ( temp highp 4-component vector of float)
+0:198                'm' ( temp highp 4X4 matrix of float)
+0:198                Constant:
+0:198                  1 (const int)
+0:198              Constant:
+0:198                1 (const int)
+0:198            direct index ( temp highp float)
+0:198              'tt' ( temp highp 3-component vector of float)
+0:198              Constant:
+0:198                1 (const int)
+0:199        add second child into first child ( temp highp float)
+0:199          direct index ( temp highp float)
+0:199            direct index ( temp highp 4-component vector of float)
+0:199              'm' ( temp highp 4X4 matrix of float)
+0:199              Constant:
+0:199                3 (const int)
+0:199            Constant:
+0:199              2 (const int)
+0:199          component-wise multiply ( temp highp float)
+0:199            direct index ( temp highp float)
+0:199              direct index ( temp highp 4-component vector of float)
+0:199                'm' ( temp highp 4X4 matrix of float)
+0:199                Constant:
+0:199                  1 (const int)
+0:199              Constant:
+0:199                2 (const int)
+0:199            direct index ( temp highp float)
+0:199              'tt' ( temp highp 3-component vector of float)
+0:199              Constant:
+0:199                1 (const int)
+0:200        add second child into first child ( temp highp float)
+0:200          direct index ( temp highp float)
+0:200            direct index ( temp highp 4-component vector of float)
+0:200              'm' ( temp highp 4X4 matrix of float)
+0:200              Constant:
+0:200                3 (const int)
+0:200            Constant:
+0:200              3 (const int)
+0:200          component-wise multiply ( temp highp float)
+0:200            direct index ( temp highp float)
+0:200              direct index ( temp highp 4-component vector of float)
+0:200                'm' ( temp highp 4X4 matrix of float)
+0:200                Constant:
+0:200                  1 (const int)
+0:200              Constant:
+0:200                3 (const int)
+0:200            direct index ( temp highp float)
+0:200              'tt' ( temp highp 3-component vector of float)
+0:200              Constant:
+0:200                1 (const int)
+0:201        add second child into first child ( temp highp float)
+0:201          direct index ( temp highp float)
+0:201            direct index ( temp highp 4-component vector of float)
+0:201              'm' ( temp highp 4X4 matrix of float)
+0:201              Constant:
+0:201                3 (const int)
+0:201            Constant:
+0:201              0 (const int)
+0:201          component-wise multiply ( temp highp float)
+0:201            direct index ( temp highp float)
+0:201              direct index ( temp highp 4-component vector of float)
+0:201                'm' ( temp highp 4X4 matrix of float)
+0:201                Constant:
+0:201                  2 (const int)
+0:201              Constant:
+0:201                0 (const int)
+0:201            direct index ( temp highp float)
+0:201              'tt' ( temp highp 3-component vector of float)
+0:201              Constant:
+0:201                2 (const int)
+0:202        add second child into first child ( temp highp float)
+0:202          direct index ( temp highp float)
+0:202            direct index ( temp highp 4-component vector of float)
+0:202              'm' ( temp highp 4X4 matrix of float)
+0:202              Constant:
+0:202                3 (const int)
+0:202            Constant:
+0:202              1 (const int)
+0:202          component-wise multiply ( temp highp float)
+0:202            direct index ( temp highp float)
+0:202              direct index ( temp highp 4-component vector of float)
+0:202                'm' ( temp highp 4X4 matrix of float)
+0:202                Constant:
+0:202                  2 (const int)
+0:202              Constant:
+0:202                1 (const int)
+0:202            direct index ( temp highp float)
+0:202              'tt' ( temp highp 3-component vector of float)
+0:202              Constant:
+0:202                2 (const int)
+0:203        add second child into first child ( temp highp float)
+0:203          direct index ( temp highp float)
+0:203            direct index ( temp highp 4-component vector of float)
+0:203              'm' ( temp highp 4X4 matrix of float)
+0:203              Constant:
+0:203                3 (const int)
+0:203            Constant:
+0:203              2 (const int)
+0:203          component-wise multiply ( temp highp float)
+0:203            direct index ( temp highp float)
+0:203              direct index ( temp highp 4-component vector of float)
+0:203                'm' ( temp highp 4X4 matrix of float)
+0:203                Constant:
+0:203                  2 (const int)
+0:203              Constant:
+0:203                2 (const int)
+0:203            direct index ( temp highp float)
+0:203              'tt' ( temp highp 3-component vector of float)
+0:203              Constant:
+0:203                2 (const int)
+0:204        add second child into first child ( temp highp float)
+0:204          direct index ( temp highp float)
+0:204            direct index ( temp highp 4-component vector of float)
+0:204              'm' ( temp highp 4X4 matrix of float)
+0:204              Constant:
+0:204                3 (const int)
+0:204            Constant:
+0:204              3 (const int)
+0:204          component-wise multiply ( temp highp float)
+0:204            direct index ( temp highp float)
+0:204              direct index ( temp highp 4-component vector of float)
+0:204                'm' ( temp highp 4X4 matrix of float)
+0:204                Constant:
+0:204                  2 (const int)
+0:204              Constant:
+0:204                3 (const int)
+0:204            direct index ( temp highp float)
+0:204              'tt' ( temp highp 3-component vector of float)
+0:204              Constant:
+0:204                2 (const int)
+0:206      Branch: Return with expression
+0:206        'm' ( temp highp 4X4 matrix of float)
+0:208  Function Definition: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:208    Function Parameters: 
+0:208      'id' ( in highp int)
+0:209    Sequence
+0:209      Sequence
+0:209        move second child to first child ( temp highp 3X3 matrix of float)
+0:209          'm' ( temp highp 3X3 matrix of float)
+0:209          Constant:
+0:209            1.000000
+0:209            0.000000
+0:209            0.000000
+0:209            0.000000
+0:209            1.000000
+0:209            0.000000
+0:209            0.000000
+0:209            0.000000
+0:209            1.000000
+0:210      Branch: Return with expression
+0:210        'm' ( temp highp 3X3 matrix of float)
+0:212  Function Definition: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float)
+0:212    Function Parameters: 
+0:212      'id' ( in highp int)
+0:213    Sequence
+0:213      Sequence
+0:213        move second child to first child ( temp highp 3X3 matrix of float)
+0:213          'm' ( temp highp 3X3 matrix of float)
+0:213          Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:213            'id' ( in highp int)
+0:214      Branch: Return with expression
+0:214        'm' ( temp highp 3X3 matrix of float)
+0:216  Function Definition: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float)
+0:216    Function Parameters: 
+0:216      'index' ( in highp int)
+0:216      'curColor' ( in highp 4-component vector of float)
+0:217    Sequence
+0:217      subtract second child into first child ( temp highp int)
+0:217        'index' ( in highp int)
+0:217        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:217          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:217          Constant:
+0:217            0 (const uint)
+0:219      Sequence
+0:219        move second child to first child ( temp highp int)
+0:219          'coord' ( temp highp int)
+0:219          'index' ( in highp int)
+0:220      Sequence
+0:220        move second child to first child ( temp highp 4-component vector of float)
+0:220          'samp' ( temp highp 4-component vector of float)
+0:220          textureFetch ( global highp 4-component vector of float)
+0:220            'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer)
+0:220            'coord' ( temp highp int)
+0:221      move second child to first child ( temp highp float)
+0:221        direct index ( temp highp float)
+0:221          'v' ( temp highp 4-component vector of float)
+0:221          Constant:
+0:221            0 (const int)
+0:221        direct index ( temp highp float)
+0:221          'samp' ( temp highp 4-component vector of float)
+0:221          Constant:
+0:221            0 (const int)
+0:222      move second child to first child ( temp highp float)
+0:222        direct index ( temp highp float)
+0:222          'v' ( temp highp 4-component vector of float)
+0:222          Constant:
+0:222            1 (const int)
+0:222        direct index ( temp highp float)
+0:222          'samp' ( temp highp 4-component vector of float)
+0:222          Constant:
+0:222            1 (const int)
+0:223      move second child to first child ( temp highp float)
+0:223        direct index ( temp highp float)
+0:223          'v' ( temp highp 4-component vector of float)
+0:223          Constant:
+0:223            2 (const int)
+0:223        direct index ( temp highp float)
+0:223          'samp' ( temp highp 4-component vector of float)
+0:223          Constant:
+0:223            2 (const int)
+0:224      move second child to first child ( temp highp float)
+0:224        direct index ( temp highp float)
+0:224          'v' ( temp highp 4-component vector of float)
+0:224          Constant:
+0:224            3 (const int)
+0:224        Constant:
+0:224          1.000000
+0:225      move second child to first child ( temp highp float)
+0:225        direct index ( temp highp float)
+0:225          'curColor' ( in highp 4-component vector of float)
+0:225          Constant:
+0:225            0 (const int)
+0:225        direct index ( temp highp float)
+0:225          'v' ( temp highp 4-component vector of float)
+0:225          Constant:
+0:225            0 (const int)
+0:227      move second child to first child ( temp highp float)
+0:227        direct index ( temp highp float)
+0:227          'curColor' ( in highp 4-component vector of float)
+0:227          Constant:
+0:227            1 (const int)
+0:227        direct index ( temp highp float)
+0:227          'v' ( temp highp 4-component vector of float)
+0:227          Constant:
+0:227            1 (const int)
+0:229      move second child to first child ( temp highp float)
+0:229        direct index ( temp highp float)
+0:229          'curColor' ( in highp 4-component vector of float)
+0:229          Constant:
+0:229            2 (const int)
+0:229        direct index ( temp highp float)
+0:229          'v' ( temp highp 4-component vector of float)
+0:229          Constant:
+0:229            2 (const int)
+0:231      Branch: Return with expression
+0:231        'curColor' ( in highp 4-component vector of float)
+0:233  Function Definition: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float)
+0:233    Function Parameters: 
+0:233      'id' ( in highp int)
+0:233      'pos' ( in highp 4-component vector of float)
+0:234    Sequence
+0:234      move second child to first child ( temp highp 4-component vector of float)
+0:234        'pos' ( in highp 4-component vector of float)
+0:234        matrix-times-vector ( temp highp 4-component vector of float)
+0:234          Function Call: TDInstanceMat(i1; ( global highp 4X4 matrix of float)
+0:234            'id' ( in highp int)
+0:234          'pos' ( in highp 4-component vector of float)
+0:235      Branch: Return with expression
+0:235        matrix-times-vector ( temp highp 4-component vector of float)
+0:235          world: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float)
+0:235            indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:235              uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:235                'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:235                Constant:
+0:235                  0 (const uint)
+0:235              Function Call: TDCameraIndex( ( global highp int)
+0:235            Constant:
+0:235              0 (const int)
+0:235          'pos' ( in highp 4-component vector of float)
+0:238  Function Definition: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:238    Function Parameters: 
+0:238      'id' ( in highp int)
+0:238      'vec' ( in highp 3-component vector of float)
+0:240    Sequence
+0:240      Sequence
+0:240        move second child to first child ( temp highp 3X3 matrix of float)
+0:240          'm' ( temp highp 3X3 matrix of float)
+0:240          Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:240            'id' ( in highp int)
+0:241      Branch: Return with expression
+0:241        matrix-times-vector ( temp highp 3-component vector of float)
+0:241          Construct mat3 ( temp highp 3X3 matrix of float)
+0:241            world: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float)
+0:241              indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:241                uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:241                  'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:241                  Constant:
+0:241                    0 (const uint)
+0:241                Function Call: TDCameraIndex( ( global highp int)
+0:241              Constant:
+0:241                0 (const int)
+0:241          matrix-times-vector ( temp highp 3-component vector of float)
+0:241            'm' ( temp highp 3X3 matrix of float)
+0:241            'vec' ( in highp 3-component vector of float)
+0:243  Function Definition: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:243    Function Parameters: 
+0:243      'id' ( in highp int)
+0:243      'vec' ( in highp 3-component vector of float)
+0:245    Sequence
+0:245      Sequence
+0:245        move second child to first child ( temp highp 3X3 matrix of float)
+0:245          'm' ( temp highp 3X3 matrix of float)
+0:245          Function Call: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float)
+0:245            'id' ( in highp int)
+0:246      Branch: Return with expression
+0:246        matrix-times-vector ( temp highp 3-component vector of float)
+0:246          Construct mat3 ( temp highp 3X3 matrix of float)
+0:246            worldForNormals: direct index for structure (layout( column_major std140) global highp 3X3 matrix of float)
+0:246              indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:246                uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:246                  'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:246                  Constant:
+0:246                    0 (const uint)
+0:246                Function Call: TDCameraIndex( ( global highp int)
+0:246              Constant:
+0:246                13 (const int)
+0:246          matrix-times-vector ( temp highp 3-component vector of float)
+0:246            'm' ( temp highp 3X3 matrix of float)
+0:246            'vec' ( in highp 3-component vector of float)
+0:248  Function Definition: TDInstanceDeform(vf4; ( global highp 4-component vector of float)
+0:248    Function Parameters: 
+0:248      'pos' ( in highp 4-component vector of float)
+0:249    Sequence
+0:249      Branch: Return with expression
+0:249        Function Call: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float)
+0:249          Function Call: TDInstanceID( ( global highp int)
+0:249          'pos' ( in highp 4-component vector of float)
+0:251  Function Definition: TDInstanceDeformVec(vf3; ( global highp 3-component vector of float)
+0:251    Function Parameters: 
+0:251      'vec' ( in highp 3-component vector of float)
+0:252    Sequence
+0:252      Branch: Return with expression
+0:252        Function Call: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:252          Function Call: TDInstanceID( ( global highp int)
+0:252          'vec' ( in highp 3-component vector of float)
+0:254  Function Definition: TDInstanceDeformNorm(vf3; ( global highp 3-component vector of float)
+0:254    Function Parameters: 
+0:254      'vec' ( in highp 3-component vector of float)
+0:255    Sequence
+0:255      Branch: Return with expression
+0:255        Function Call: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:255          Function Call: TDInstanceID( ( global highp int)
+0:255          'vec' ( in highp 3-component vector of float)
+0:257  Function Definition: TDInstanceActive( ( global bool)
+0:257    Function Parameters: 
+0:257    Sequence
+0:257      Branch: Return with expression
+0:257        Function Call: TDInstanceActive(i1; ( global bool)
+0:257          Function Call: TDInstanceID( ( global highp int)
+0:258  Function Definition: TDInstanceTranslate( ( global highp 3-component vector of float)
+0:258    Function Parameters: 
+0:258    Sequence
+0:258      Branch: Return with expression
+0:258        Function Call: TDInstanceTranslate(i1; ( global highp 3-component vector of float)
+0:258          Function Call: TDInstanceID( ( global highp int)
+0:259  Function Definition: TDInstanceRotateMat( ( global highp 3X3 matrix of float)
+0:259    Function Parameters: 
+0:259    Sequence
+0:259      Branch: Return with expression
+0:259        Function Call: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float)
+0:259          Function Call: TDInstanceID( ( global highp int)
+0:260  Function Definition: TDInstanceScale( ( global highp 3-component vector of float)
+0:260    Function Parameters: 
+0:260    Sequence
+0:260      Branch: Return with expression
+0:260        Function Call: TDInstanceScale(i1; ( global highp 3-component vector of float)
+0:260          Function Call: TDInstanceID( ( global highp int)
+0:261  Function Definition: TDInstanceMat( ( global highp 4X4 matrix of float)
+0:261    Function Parameters: 
+0:261    Sequence
+0:261      Branch: Return with expression
+0:261        Function Call: TDInstanceMat(i1; ( global highp 4X4 matrix of float)
+0:261          Function Call: TDInstanceID( ( global highp int)
+0:263  Function Definition: TDInstanceMat3( ( global highp 3X3 matrix of float)
+0:263    Function Parameters: 
+0:263    Sequence
+0:263      Branch: Return with expression
+0:263        Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:263          Function Call: TDInstanceID( ( global highp int)
+0:265  Function Definition: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float)
+0:265    Function Parameters: 
+0:265      't' ( in highp 3-component vector of float)
+0:266    Sequence
+0:266      Branch: Return with expression
+0:266        Function Call: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float)
+0:266          Function Call: TDInstanceID( ( global highp int)
+0:266          't' ( in highp 3-component vector of float)
+0:268  Function Definition: TDInstanceColor(vf4; ( global highp 4-component vector of float)
+0:268    Function Parameters: 
+0:268      'curColor' ( in highp 4-component vector of float)
+0:269    Sequence
+0:269      Branch: Return with expression
+0:269        Function Call: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float)
+0:269          Function Call: TDInstanceID( ( global highp int)
+0:269          'curColor' ( in highp 4-component vector of float)
+0:271  Function Definition: TDSkinnedDeform(vf4; ( global highp 4-component vector of float)
+0:271    Function Parameters: 
+0:271      'pos' ( in highp 4-component vector of float)
+0:271    Sequence
+0:271      Branch: Return with expression
+0:271        'pos' ( in highp 4-component vector of float)
+0:273  Function Definition: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float)
+0:273    Function Parameters: 
+0:273      'vec' ( in highp 3-component vector of float)
+0:273    Sequence
+0:273      Branch: Return with expression
+0:273        'vec' ( in highp 3-component vector of float)
+0:275  Function Definition: TDFastDeformTangent(vf3;vf4;vf3; ( global highp 3-component vector of float)
+0:275    Function Parameters: 
+0:275      'oldNorm' ( in highp 3-component vector of float)
+0:275      'oldTangent' ( in highp 4-component vector of float)
+0:275      'deformedNorm' ( in highp 3-component vector of float)
+0:276    Sequence
+0:276      Branch: Return with expression
+0:276        vector swizzle ( temp highp 3-component vector of float)
+0:276          'oldTangent' ( in highp 4-component vector of float)
+0:276          Sequence
+0:276            Constant:
+0:276              0 (const int)
+0:276            Constant:
+0:276              1 (const int)
+0:276            Constant:
+0:276              2 (const int)
+0:277  Function Definition: TDBoneMat(i1; ( global highp 4X4 matrix of float)
+0:277    Function Parameters: 
+0:277      'index' ( in highp int)
+0:278    Sequence
+0:278      Branch: Return with expression
+0:278        Constant:
+0:278          1.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          1.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          1.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          1.000000
+0:280  Function Definition: TDDeform(vf4; ( global highp 4-component vector of float)
+0:280    Function Parameters: 
+0:280      'pos' ( in highp 4-component vector of float)
+0:281    Sequence
+0:281      move second child to first child ( temp highp 4-component vector of float)
+0:281        'pos' ( in highp 4-component vector of float)
+0:281        Function Call: TDSkinnedDeform(vf4; ( global highp 4-component vector of float)
+0:281          'pos' ( in highp 4-component vector of float)
+0:282      move second child to first child ( temp highp 4-component vector of float)
+0:282        'pos' ( in highp 4-component vector of float)
+0:282        Function Call: TDInstanceDeform(vf4; ( global highp 4-component vector of float)
+0:282          'pos' ( in highp 4-component vector of float)
+0:283      Branch: Return with expression
+0:283        'pos' ( in highp 4-component vector of float)
+0:286  Function Definition: TDDeform(i1;vf3; ( global highp 4-component vector of float)
+0:286    Function Parameters: 
+0:286      'instanceID' ( in highp int)
+0:286      'p' ( in highp 3-component vector of float)
+0:287    Sequence
+0:287      Sequence
+0:287        move second child to first child ( temp highp 4-component vector of float)
+0:287          'pos' ( temp highp 4-component vector of float)
+0:287          Construct vec4 ( temp highp 4-component vector of float)
+0:287            'p' ( in highp 3-component vector of float)
+0:287            Constant:
+0:287              1.000000
+0:288      move second child to first child ( temp highp 4-component vector of float)
+0:288        'pos' ( temp highp 4-component vector of float)
+0:288        Function Call: TDSkinnedDeform(vf4; ( global highp 4-component vector of float)
+0:288          'pos' ( temp highp 4-component vector of float)
+0:289      move second child to first child ( temp highp 4-component vector of float)
+0:289        'pos' ( temp highp 4-component vector of float)
+0:289        Function Call: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float)
+0:289          'instanceID' ( in highp int)
+0:289          'pos' ( temp highp 4-component vector of float)
+0:290      Branch: Return with expression
+0:290        'pos' ( temp highp 4-component vector of float)
+0:293  Function Definition: TDDeform(vf3; ( global highp 4-component vector of float)
+0:293    Function Parameters: 
+0:293      'pos' ( in highp 3-component vector of float)
+0:294    Sequence
+0:294      Branch: Return with expression
+0:294        Function Call: TDDeform(i1;vf3; ( global highp 4-component vector of float)
+0:294          Function Call: TDInstanceID( ( global highp int)
+0:294          'pos' ( in highp 3-component vector of float)
+0:297  Function Definition: TDDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:297    Function Parameters: 
+0:297      'instanceID' ( in highp int)
+0:297      'vec' ( in highp 3-component vector of float)
+0:298    Sequence
+0:298      move second child to first child ( temp highp 3-component vector of float)
+0:298        'vec' ( in highp 3-component vector of float)
+0:298        Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float)
+0:298          'vec' ( in highp 3-component vector of float)
+0:299      move second child to first child ( temp highp 3-component vector of float)
+0:299        'vec' ( in highp 3-component vector of float)
+0:299        Function Call: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:299          'instanceID' ( in highp int)
+0:299          'vec' ( in highp 3-component vector of float)
+0:300      Branch: Return with expression
+0:300        'vec' ( in highp 3-component vector of float)
+0:303  Function Definition: TDDeformVec(vf3; ( global highp 3-component vector of float)
+0:303    Function Parameters: 
+0:303      'vec' ( in highp 3-component vector of float)
+0:304    Sequence
+0:304      Branch: Return with expression
+0:304        Function Call: TDDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:304          Function Call: TDInstanceID( ( global highp int)
+0:304          'vec' ( in highp 3-component vector of float)
+0:307  Function Definition: TDDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:307    Function Parameters: 
+0:307      'instanceID' ( in highp int)
+0:307      'vec' ( in highp 3-component vector of float)
+0:308    Sequence
+0:308      move second child to first child ( temp highp 3-component vector of float)
+0:308        'vec' ( in highp 3-component vector of float)
+0:308        Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float)
+0:308          'vec' ( in highp 3-component vector of float)
+0:309      move second child to first child ( temp highp 3-component vector of float)
+0:309        'vec' ( in highp 3-component vector of float)
+0:309        Function Call: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:309          'instanceID' ( in highp int)
+0:309          'vec' ( in highp 3-component vector of float)
+0:310      Branch: Return with expression
+0:310        'vec' ( in highp 3-component vector of float)
+0:313  Function Definition: TDDeformNorm(vf3; ( global highp 3-component vector of float)
+0:313    Function Parameters: 
+0:313      'vec' ( in highp 3-component vector of float)
+0:314    Sequence
+0:314      Branch: Return with expression
+0:314        Function Call: TDDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:314          Function Call: TDInstanceID( ( global highp int)
+0:314          'vec' ( in highp 3-component vector of float)
+0:317  Function Definition: TDSkinnedDeformNorm(vf3; ( global highp 3-component vector of float)
+0:317    Function Parameters: 
+0:317      'vec' ( in highp 3-component vector of float)
+0:318    Sequence
+0:318      move second child to first child ( temp highp 3-component vector of float)
+0:318        'vec' ( in highp 3-component vector of float)
+0:318        Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float)
+0:318          'vec' ( in highp 3-component vector of float)
+0:319      Branch: Return with expression
+0:319        'vec' ( in highp 3-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position,  global highp 3-component vector of float direction,  global highp 3-component vector of float diffuse,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float lightSize,  global highp 4-component vector of float misc,  global highp 4-component vector of float coneLookupScaleBias,  global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix,  global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights})
+0:?     'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs})
+0:?     'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:?     'anon@4' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor,  global highp int renderTOPCameraIndex} uTDCamInfos})
+0:?     'anon@5' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float viewport,  global highp 4-component vector of float viewportRes,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor} uTDGeneral})
+0:?     'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:?     'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer)
+0:?     'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer)
+0:?     'gl_VertexIndex' ( in int VertexIndex)
+0:?     'gl_InstanceIndex' ( in int InstanceIndex)
+
+vk.relaxed.stagelink.0.0.frag
+Shader version: 460
+gl_FragCoord origin is upper left
+0:? Sequence
+0:95  Function Definition: main( ( global void)
+0:95    Function Parameters: 
+0:99    Sequence
+0:99      Function Call: TDCheckDiscard( ( global void)
+0:101      Sequence
+0:101        move second child to first child ( temp highp 4-component vector of float)
+0:101          'outcol' ( temp highp 4-component vector of float)
+0:101          Constant:
+0:101            0.000000
+0:101            0.000000
+0:101            0.000000
+0:101            0.000000
+0:103      Sequence
+0:103        move second child to first child ( temp highp 3-component vector of float)
+0:103          'texCoord0' ( temp highp 3-component vector of float)
+0:103          vector swizzle ( temp highp 3-component vector of float)
+0:103            texCoord0: direct index for structure ( in highp 3-component vector of float)
+0:103              'iVert' ( in block{ in highp 4-component vector of float color,  in highp 3-component vector of float worldSpacePos,  in highp 3-component vector of float texCoord0,  flat in highp int cameraIndex,  flat in highp int instance})
+0:103              Constant:
+0:103                2 (const int)
+0:103            Sequence
+0:103              Constant:
+0:103                0 (const int)
+0:103              Constant:
+0:103                1 (const int)
+0:103              Constant:
+0:103                2 (const int)
+0:104      Sequence
+0:104        move second child to first child ( temp highp float)
+0:104          'actualTexZ' ( temp highp float)
+0:104          mod ( global highp float)
+0:104            Convert int to float ( temp highp float)
+0:104              Convert float to int ( temp highp int)
+0:104                direct index ( temp highp float)
+0:104                  'texCoord0' ( temp highp 3-component vector of float)
+0:104                  Constant:
+0:104                    2 (const int)
+0:104            Constant:
+0:104              2048.000000
+0:105      Sequence
+0:105        move second child to first child ( temp highp float)
+0:105          'instanceLoop' ( temp highp float)
+0:105          Floor ( global highp float)
+0:105            Convert int to float ( temp highp float)
+0:105              divide ( temp highp int)
+0:105                Convert float to int ( temp highp int)
+0:105                  direct index ( temp highp float)
+0:105                    'texCoord0' ( temp highp 3-component vector of float)
+0:105                    Constant:
+0:105                      2 (const int)
+0:105                Constant:
+0:105                  2048 (const int)
+0:106      move second child to first child ( temp highp float)
+0:106        direct index ( temp highp float)
+0:106          'texCoord0' ( temp highp 3-component vector of float)
+0:106          Constant:
+0:106            2 (const int)
+0:106        'actualTexZ' ( temp highp float)
+0:107      Sequence
+0:107        move second child to first child ( temp highp 4-component vector of float)
+0:107          'colorMapColor' ( temp highp 4-component vector of float)
+0:107          texture ( global highp 4-component vector of float)
+0:107            'sColorMap' ( uniform highp sampler2DArray)
+0:107            vector swizzle ( temp highp 3-component vector of float)
+0:107              'texCoord0' ( temp highp 3-component vector of float)
+0:107              Sequence
+0:107                Constant:
+0:107                  0 (const int)
+0:107                Constant:
+0:107                  1 (const int)
+0:107                Constant:
+0:107                  2 (const int)
+0:109      Sequence
+0:109        move second child to first child ( temp highp float)
+0:109          'red' ( temp highp float)
+0:109          indirect index ( temp highp float)
+0:109            'colorMapColor' ( temp highp 4-component vector of float)
+0:109            Convert float to int ( temp highp int)
+0:109              'instanceLoop' ( temp highp float)
+0:110      move second child to first child ( temp highp 4-component vector of float)
+0:110        'colorMapColor' ( temp highp 4-component vector of float)
+0:110        Construct vec4 ( temp highp 4-component vector of float)
+0:110          'red' ( temp highp float)
+0:112      add second child into first child ( temp highp 3-component vector of float)
+0:112        vector swizzle ( temp highp 3-component vector of float)
+0:112          'outcol' ( temp highp 4-component vector of float)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        component-wise multiply ( temp highp 3-component vector of float)
+0:112          uConstant: direct index for structure ( uniform highp 3-component vector of float)
+0:112            'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:112            Constant:
+0:112              3 (const uint)
+0:112          vector swizzle ( temp highp 3-component vector of float)
+0:112            color: direct index for structure ( in highp 4-component vector of float)
+0:112              'iVert' ( in block{ in highp 4-component vector of float color,  in highp 3-component vector of float worldSpacePos,  in highp 3-component vector of float texCoord0,  flat in highp int cameraIndex,  flat in highp int instance})
+0:112              Constant:
+0:112                0 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      multiply second child into first child ( temp highp 4-component vector of float)
+0:114        'outcol' ( temp highp 4-component vector of float)
+0:114        'colorMapColor' ( temp highp 4-component vector of float)
+0:117      Sequence
+0:117        move second child to first child ( temp highp float)
+0:117          'alpha' ( temp highp float)
+0:117          component-wise multiply ( temp highp float)
+0:117            direct index ( temp highp float)
+0:117              color: direct index for structure ( in highp 4-component vector of float)
+0:117                'iVert' ( in block{ in highp 4-component vector of float color,  in highp 3-component vector of float worldSpacePos,  in highp 3-component vector of float texCoord0,  flat in highp int cameraIndex,  flat in highp int instance})
+0:117                Constant:
+0:117                  0 (const int)
+0:117              Constant:
+0:117                3 (const int)
+0:117            direct index ( temp highp float)
+0:117              'colorMapColor' ( temp highp 4-component vector of float)
+0:117              Constant:
+0:117                3 (const int)
+0:120      move second child to first child ( temp highp 4-component vector of float)
+0:120        'outcol' ( temp highp 4-component vector of float)
+0:120        Function Call: TDDither(vf4; ( global highp 4-component vector of float)
+0:120          'outcol' ( temp highp 4-component vector of float)
+0:122      vector scale second child into first child ( temp highp 3-component vector of float)
+0:122        vector swizzle ( temp highp 3-component vector of float)
+0:122          'outcol' ( temp highp 4-component vector of float)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        'alpha' ( temp highp float)
+0:126      Function Call: TDAlphaTest(f1; ( global void)
+0:126        'alpha' ( temp highp float)
+0:128      move second child to first child ( temp highp float)
+0:128        direct index ( temp highp float)
+0:128          'outcol' ( temp highp 4-component vector of float)
+0:128          Constant:
+0:128            3 (const int)
+0:128        'alpha' ( temp highp float)
+0:129      move second child to first child ( temp highp 4-component vector of float)
+0:129        direct index (layout( location=0) temp highp 4-component vector of float)
+0:129          'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float)
+0:129          Constant:
+0:129            0 (const int)
+0:129        Function Call: TDOutputSwizzle(vf4; ( global highp 4-component vector of float)
+0:129          'outcol' ( temp highp 4-component vector of float)
+0:135      Sequence
+0:135        Sequence
+0:135          move second child to first child ( temp highp int)
+0:135            'i' ( temp highp int)
+0:135            Constant:
+0:135              1 (const int)
+0:135        Loop with condition tested first
+0:135          Loop Condition
+0:135          Compare Less Than ( temp bool)
+0:135            'i' ( temp highp int)
+0:135            Constant:
+0:135              1 (const int)
+0:135          Loop Body
+0:137          Sequence
+0:137            move second child to first child ( temp highp 4-component vector of float)
+0:137              indirect index (layout( location=0) temp highp 4-component vector of float)
+0:137                'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float)
+0:137                'i' ( temp highp int)
+0:137              Constant:
+0:137                0.000000
+0:137                0.000000
+0:137                0.000000
+0:137                0.000000
+0:135          Loop Terminal Expression
+0:135          Post-Increment ( temp highp int)
+0:135            'i' ( temp highp int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor,  global highp int renderTOPCameraIndex} uTDCamInfos})
+0:?     'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float viewport,  global highp 4-component vector of float viewportRes,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor} uTDGeneral})
+0:?     'sColorMap' ( uniform highp sampler2DArray)
+0:?     'iVert' ( in block{ in highp 4-component vector of float color,  in highp 3-component vector of float worldSpacePos,  in highp 3-component vector of float texCoord0,  flat in highp int cameraIndex,  flat in highp int instance})
+0:?     'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float)
+
+vk.relaxed.stagelink.0.1.frag
+Shader version: 460
+gl_FragCoord origin is upper left
+0:? Sequence
+0:116  Function Definition: TDColor(vf4; ( global highp 4-component vector of float)
+0:116    Function Parameters: 
+0:116      'color' ( in highp 4-component vector of float)
+0:116    Sequence
+0:116      Branch: Return with expression
+0:116        'color' ( in highp 4-component vector of float)
+0:117  Function Definition: TDCheckOrderIndTrans( ( global void)
+0:117    Function Parameters: 
+0:119  Function Definition: TDCheckDiscard( ( global void)
+0:119    Function Parameters: 
+0:120    Sequence
+0:120      Function Call: TDCheckOrderIndTrans( ( global void)
+0:122  Function Definition: TDDither(vf4; ( global highp 4-component vector of float)
+0:122    Function Parameters: 
+0:122      'color' ( in highp 4-component vector of float)
+0:124    Sequence
+0:124      Sequence
+0:124        move second child to first child ( temp highp float)
+0:124          'd' ( temp highp float)
+0:125          direct index ( temp highp float)
+0:125            texture ( global highp 4-component vector of float)
+0:124              'sTDNoiseMap' ( uniform highp sampler2D)
+0:125              divide ( temp highp 2-component vector of float)
+0:125                vector swizzle ( temp highp 2-component vector of float)
+0:125                  'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:125                  Sequence
+0:125                    Constant:
+0:125                      0 (const int)
+0:125                    Constant:
+0:125                      1 (const int)
+0:125                Constant:
+0:125                  256.000000
+0:125            Constant:
+0:125              0 (const int)
+0:126      subtract second child into first child ( temp highp float)
+0:126        'd' ( temp highp float)
+0:126        Constant:
+0:126          0.500000
+0:127      divide second child into first child ( temp highp float)
+0:127        'd' ( temp highp float)
+0:127        Constant:
+0:127          256.000000
+0:128      Branch: Return with expression
+0:128        Construct vec4 ( temp highp 4-component vector of float)
+0:128          add ( temp highp 3-component vector of float)
+0:128            vector swizzle ( temp highp 3-component vector of float)
+0:128              'color' ( in highp 4-component vector of float)
+0:128              Sequence
+0:128                Constant:
+0:128                  0 (const int)
+0:128                Constant:
+0:128                  1 (const int)
+0:128                Constant:
+0:128                  2 (const int)
+0:128            'd' ( temp highp float)
+0:128          direct index ( temp highp float)
+0:128            'color' ( in highp 4-component vector of float)
+0:128            Constant:
+0:128              3 (const int)
+0:130  Function Definition: TDFrontFacing(vf3;vf3; ( global bool)
+0:130    Function Parameters: 
+0:130      'pos' ( in highp 3-component vector of float)
+0:130      'normal' ( in highp 3-component vector of float)
+0:132    Sequence
+0:132      Branch: Return with expression
+0:132        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:134  Function Definition: TDAttenuateLight(i1;f1; ( global highp float)
+0:134    Function Parameters: 
+0:134      'index' ( in highp int)
+0:134      'lightDist' ( in highp float)
+0:136    Sequence
+0:136      Branch: Return with expression
+0:136        Constant:
+0:136          1.000000
+0:138  Function Definition: TDAlphaTest(f1; ( global void)
+0:138    Function Parameters: 
+0:138      'alpha' ( in highp float)
+0:140  Function Definition: TDHardShadow(i1;vf3; ( global highp float)
+0:140    Function Parameters: 
+0:140      'lightIndex' ( in highp int)
+0:140      'worldSpacePos' ( in highp 3-component vector of float)
+0:141    Sequence
+0:141      Branch: Return with expression
+0:141        Constant:
+0:141          0.000000
+0:142  Function Definition: TDSoftShadow(i1;vf3;i1;i1; ( global highp float)
+0:142    Function Parameters: 
+0:142      'lightIndex' ( in highp int)
+0:142      'worldSpacePos' ( in highp 3-component vector of float)
+0:142      'samples' ( in highp int)
+0:142      'steps' ( in highp int)
+0:143    Sequence
+0:143      Branch: Return with expression
+0:143        Constant:
+0:143          0.000000
+0:144  Function Definition: TDSoftShadow(i1;vf3; ( global highp float)
+0:144    Function Parameters: 
+0:144      'lightIndex' ( in highp int)
+0:144      'worldSpacePos' ( in highp 3-component vector of float)
+0:145    Sequence
+0:145      Branch: Return with expression
+0:145        Constant:
+0:145          0.000000
+0:146  Function Definition: TDShadow(i1;vf3; ( global highp float)
+0:146    Function Parameters: 
+0:146      'lightIndex' ( in highp int)
+0:146      'worldSpacePos' ( in highp 3-component vector of float)
+0:147    Sequence
+0:147      Branch: Return with expression
+0:147        Constant:
+0:147          0.000000
+0:152  Function Definition: iTDRadicalInverse_VdC(u1; ( global highp float)
+0:152    Function Parameters: 
+0:152      'bits' ( in highp uint)
+0:154    Sequence
+0:154      move second child to first child ( temp highp uint)
+0:154        'bits' ( in highp uint)
+0:154        inclusive-or ( temp highp uint)
+0:154          left-shift ( temp highp uint)
+0:154            'bits' ( in highp uint)
+0:154            Constant:
+0:154              16 (const uint)
+0:154          right-shift ( temp highp uint)
+0:154            'bits' ( in highp uint)
+0:154            Constant:
+0:154              16 (const uint)
+0:155      move second child to first child ( temp highp uint)
+0:155        'bits' ( in highp uint)
+0:155        inclusive-or ( temp highp uint)
+0:155          left-shift ( temp highp uint)
+0:155            bitwise and ( temp highp uint)
+0:155              'bits' ( in highp uint)
+0:155              Constant:
+0:155                1431655765 (const uint)
+0:155            Constant:
+0:155              1 (const uint)
+0:155          right-shift ( temp highp uint)
+0:155            bitwise and ( temp highp uint)
+0:155              'bits' ( in highp uint)
+0:155              Constant:
+0:155                2863311530 (const uint)
+0:155            Constant:
+0:155              1 (const uint)
+0:156      move second child to first child ( temp highp uint)
+0:156        'bits' ( in highp uint)
+0:156        inclusive-or ( temp highp uint)
+0:156          left-shift ( temp highp uint)
+0:156            bitwise and ( temp highp uint)
+0:156              'bits' ( in highp uint)
+0:156              Constant:
+0:156                858993459 (const uint)
+0:156            Constant:
+0:156              2 (const uint)
+0:156          right-shift ( temp highp uint)
+0:156            bitwise and ( temp highp uint)
+0:156              'bits' ( in highp uint)
+0:156              Constant:
+0:156                3435973836 (const uint)
+0:156            Constant:
+0:156              2 (const uint)
+0:157      move second child to first child ( temp highp uint)
+0:157        'bits' ( in highp uint)
+0:157        inclusive-or ( temp highp uint)
+0:157          left-shift ( temp highp uint)
+0:157            bitwise and ( temp highp uint)
+0:157              'bits' ( in highp uint)
+0:157              Constant:
+0:157                252645135 (const uint)
+0:157            Constant:
+0:157              4 (const uint)
+0:157          right-shift ( temp highp uint)
+0:157            bitwise and ( temp highp uint)
+0:157              'bits' ( in highp uint)
+0:157              Constant:
+0:157                4042322160 (const uint)
+0:157            Constant:
+0:157              4 (const uint)
+0:158      move second child to first child ( temp highp uint)
+0:158        'bits' ( in highp uint)
+0:158        inclusive-or ( temp highp uint)
+0:158          left-shift ( temp highp uint)
+0:158            bitwise and ( temp highp uint)
+0:158              'bits' ( in highp uint)
+0:158              Constant:
+0:158                16711935 (const uint)
+0:158            Constant:
+0:158              8 (const uint)
+0:158          right-shift ( temp highp uint)
+0:158            bitwise and ( temp highp uint)
+0:158              'bits' ( in highp uint)
+0:158              Constant:
+0:158                4278255360 (const uint)
+0:158            Constant:
+0:158              8 (const uint)
+0:159      Branch: Return with expression
+0:159        component-wise multiply ( temp highp float)
+0:159          Convert uint to float ( temp highp float)
+0:159            'bits' ( in highp uint)
+0:159          Constant:
+0:159            2.3283064365387e-10
+0:161  Function Definition: iTDHammersley(u1;u1; ( global highp 2-component vector of float)
+0:161    Function Parameters: 
+0:161      'i' ( in highp uint)
+0:161      'N' ( in highp uint)
+0:163    Sequence
+0:163      Branch: Return with expression
+0:163        Construct vec2 ( temp highp 2-component vector of float)
+0:163          divide ( temp highp float)
+0:163            Convert uint to float ( temp highp float)
+0:163              'i' ( in highp uint)
+0:163            Convert uint to float ( temp highp float)
+0:163              'N' ( in highp uint)
+0:163          Function Call: iTDRadicalInverse_VdC(u1; ( global highp float)
+0:163            'i' ( in highp uint)
+0:165  Function Definition: iTDImportanceSampleGGX(vf2;f1;vf3; ( global highp 3-component vector of float)
+0:165    Function Parameters: 
+0:165      'Xi' ( in highp 2-component vector of float)
+0:165      'roughness2' ( in highp float)
+0:165      'N' ( in highp 3-component vector of float)
+0:167    Sequence
+0:167      Sequence
+0:167        move second child to first child ( temp highp float)
+0:167          'a' ( temp highp float)
+0:167          'roughness2' ( in highp float)
+0:168      Sequence
+0:168        move second child to first child ( temp highp float)
+0:168          'phi' ( temp highp float)
+0:168          component-wise multiply ( temp highp float)
+0:168            Constant:
+0:168              6.283185
+0:168            direct index ( temp highp float)
+0:168              'Xi' ( in highp 2-component vector of float)
+0:168              Constant:
+0:168                0 (const int)
+0:169      Sequence
+0:169        move second child to first child ( temp highp float)
+0:169          'cosTheta' ( temp highp float)
+0:169          sqrt ( global highp float)
+0:169            divide ( temp highp float)
+0:169              subtract ( temp highp float)
+0:169                Constant:
+0:169                  1.000000
+0:169                direct index ( temp highp float)
+0:169                  'Xi' ( in highp 2-component vector of float)
+0:169                  Constant:
+0:169                    1 (const int)
+0:169              add ( temp highp float)
+0:169                Constant:
+0:169                  1.000000
+0:169                component-wise multiply ( temp highp float)
+0:169                  subtract ( temp highp float)
+0:169                    component-wise multiply ( temp highp float)
+0:169                      'a' ( temp highp float)
+0:169                      'a' ( temp highp float)
+0:169                    Constant:
+0:169                      1.000000
+0:169                  direct index ( temp highp float)
+0:169                    'Xi' ( in highp 2-component vector of float)
+0:169                    Constant:
+0:169                      1 (const int)
+0:170      Sequence
+0:170        move second child to first child ( temp highp float)
+0:170          'sinTheta' ( temp highp float)
+0:170          sqrt ( global highp float)
+0:170            subtract ( temp highp float)
+0:170              Constant:
+0:170                1.000000
+0:170              component-wise multiply ( temp highp float)
+0:170                'cosTheta' ( temp highp float)
+0:170                'cosTheta' ( temp highp float)
+0:173      move second child to first child ( temp highp float)
+0:173        direct index ( temp highp float)
+0:173          'H' ( temp highp 3-component vector of float)
+0:173          Constant:
+0:173            0 (const int)
+0:173        component-wise multiply ( temp highp float)
+0:173          'sinTheta' ( temp highp float)
+0:173          cosine ( global highp float)
+0:173            'phi' ( temp highp float)
+0:174      move second child to first child ( temp highp float)
+0:174        direct index ( temp highp float)
+0:174          'H' ( temp highp 3-component vector of float)
+0:174          Constant:
+0:174            1 (const int)
+0:174        component-wise multiply ( temp highp float)
+0:174          'sinTheta' ( temp highp float)
+0:174          sine ( global highp float)
+0:174            'phi' ( temp highp float)
+0:175      move second child to first child ( temp highp float)
+0:175        direct index ( temp highp float)
+0:175          'H' ( temp highp 3-component vector of float)
+0:175          Constant:
+0:175            2 (const int)
+0:175        'cosTheta' ( temp highp float)
+0:177      Sequence
+0:177        move second child to first child ( temp highp 3-component vector of float)
+0:177          'upVector' ( temp highp 3-component vector of float)
+0:177          Test condition and select ( temp highp 3-component vector of float)
+0:177            Condition
+0:177            Compare Less Than ( temp bool)
+0:177              Absolute value ( global highp float)
+0:177                direct index ( temp highp float)
+0:177                  'N' ( in highp 3-component vector of float)
+0:177                  Constant:
+0:177                    2 (const int)
+0:177              Constant:
+0:177                0.999000
+0:177            true case
+0:177            Constant:
+0:177              0.000000
+0:177              0.000000
+0:177              1.000000
+0:177            false case
+0:177            Constant:
+0:177              1.000000
+0:177              0.000000
+0:177              0.000000
+0:178      Sequence
+0:178        move second child to first child ( temp highp 3-component vector of float)
+0:178          'tangentX' ( temp highp 3-component vector of float)
+0:178          normalize ( global highp 3-component vector of float)
+0:178            cross-product ( global highp 3-component vector of float)
+0:178              'upVector' ( temp highp 3-component vector of float)
+0:178              'N' ( in highp 3-component vector of float)
+0:179      Sequence
+0:179        move second child to first child ( temp highp 3-component vector of float)
+0:179          'tangentY' ( temp highp 3-component vector of float)
+0:179          cross-product ( global highp 3-component vector of float)
+0:179            'N' ( in highp 3-component vector of float)
+0:179            'tangentX' ( temp highp 3-component vector of float)
+0:182      Sequence
+0:182        move second child to first child ( temp highp 3-component vector of float)
+0:182          'worldResult' ( temp highp 3-component vector of float)
+0:182          add ( temp highp 3-component vector of float)
+0:182            add ( temp highp 3-component vector of float)
+0:182              vector-scale ( temp highp 3-component vector of float)
+0:182                'tangentX' ( temp highp 3-component vector of float)
+0:182                direct index ( temp highp float)
+0:182                  'H' ( temp highp 3-component vector of float)
+0:182                  Constant:
+0:182                    0 (const int)
+0:182              vector-scale ( temp highp 3-component vector of float)
+0:182                'tangentY' ( temp highp 3-component vector of float)
+0:182                direct index ( temp highp float)
+0:182                  'H' ( temp highp 3-component vector of float)
+0:182                  Constant:
+0:182                    1 (const int)
+0:182            vector-scale ( temp highp 3-component vector of float)
+0:182              'N' ( in highp 3-component vector of float)
+0:182              direct index ( temp highp float)
+0:182                'H' ( temp highp 3-component vector of float)
+0:182                Constant:
+0:182                  2 (const int)
+0:183      Branch: Return with expression
+0:183        'worldResult' ( temp highp 3-component vector of float)
+0:185  Function Definition: iTDDistributionGGX(vf3;vf3;f1; ( global highp float)
+0:185    Function Parameters: 
+0:185      'normal' ( in highp 3-component vector of float)
+0:185      'half_vector' ( in highp 3-component vector of float)
+0:185      'roughness2' ( in highp float)
+0:?     Sequence
+0:189      Sequence
+0:189        move second child to first child ( temp highp float)
+0:189          'NdotH' ( temp highp float)
+0:189          clamp ( global highp float)
+0:189            dot-product ( global highp float)
+0:189              'normal' ( in highp 3-component vector of float)
+0:189              'half_vector' ( in highp 3-component vector of float)
+0:189            Constant:
+0:189              1.0000000000000e-06
+0:189            Constant:
+0:189              1.000000
+0:191      Sequence
+0:191        move second child to first child ( temp highp float)
+0:191          'alpha2' ( temp highp float)
+0:191          component-wise multiply ( temp highp float)
+0:191            'roughness2' ( in highp float)
+0:191            'roughness2' ( in highp float)
+0:193      Sequence
+0:193        move second child to first child ( temp highp float)
+0:193          'denom' ( temp highp float)
+0:193          add ( temp highp float)
+0:193            component-wise multiply ( temp highp float)
+0:193              component-wise multiply ( temp highp float)
+0:193                'NdotH' ( temp highp float)
+0:193                'NdotH' ( temp highp float)
+0:193              subtract ( temp highp float)
+0:193                'alpha2' ( temp highp float)
+0:193                Constant:
+0:193                  1.000000
+0:193            Constant:
+0:193              1.000000
+0:194      move second child to first child ( temp highp float)
+0:194        'denom' ( temp highp float)
+0:194        max ( global highp float)
+0:194          Constant:
+0:194            1.0000000000000e-08
+0:194          'denom' ( temp highp float)
+0:195      Branch: Return with expression
+0:195        divide ( temp highp float)
+0:195          'alpha2' ( temp highp float)
+0:195          component-wise multiply ( temp highp float)
+0:195            component-wise multiply ( temp highp float)
+0:195              Constant:
+0:195                3.141593
+0:195              'denom' ( temp highp float)
+0:195            'denom' ( temp highp float)
+0:197  Function Definition: iTDCalcF(vf3;f1; ( global highp 3-component vector of float)
+0:197    Function Parameters: 
+0:197      'F0' ( in highp 3-component vector of float)
+0:197      'VdotH' ( in highp float)
+0:198    Sequence
+0:198      Branch: Return with expression
+0:198        add ( temp highp 3-component vector of float)
+0:198          'F0' ( in highp 3-component vector of float)
+0:198          vector-scale ( temp highp 3-component vector of float)
+0:198            subtract ( temp highp 3-component vector of float)
+0:198              Constant:
+0:198                1.000000
+0:198                1.000000
+0:198                1.000000
+0:198              'F0' ( in highp 3-component vector of float)
+0:198            pow ( global highp float)
+0:198              Constant:
+0:198                2.000000
+0:198              component-wise multiply ( temp highp float)
+0:198                subtract ( temp highp float)
+0:198                  component-wise multiply ( temp highp float)
+0:198                    Constant:
+0:198                      -5.554730
+0:198                    'VdotH' ( in highp float)
+0:198                  Constant:
+0:198                    6.983160
+0:198                'VdotH' ( in highp float)
+0:201  Function Definition: iTDCalcG(f1;f1;f1; ( global highp float)
+0:201    Function Parameters: 
+0:201      'NdotL' ( in highp float)
+0:201      'NdotV' ( in highp float)
+0:201      'k' ( in highp float)
+0:202    Sequence
+0:202      Sequence
+0:202        move second child to first child ( temp highp float)
+0:202          'Gl' ( temp highp float)
+0:202          divide ( temp highp float)
+0:202            Constant:
+0:202              1.000000
+0:202            add ( temp highp float)
+0:202              component-wise multiply ( temp highp float)
+0:202                'NdotL' ( in highp float)
+0:202                subtract ( temp highp float)
+0:202                  Constant:
+0:202                    1.000000
+0:202                  'k' ( in highp float)
+0:202              'k' ( in highp float)
+0:203      Sequence
+0:203        move second child to first child ( temp highp float)
+0:203          'Gv' ( temp highp float)
+0:203          divide ( temp highp float)
+0:203            Constant:
+0:203              1.000000
+0:203            add ( temp highp float)
+0:203              component-wise multiply ( temp highp float)
+0:203                'NdotV' ( in highp float)
+0:203                subtract ( temp highp float)
+0:203                  Constant:
+0:203                    1.000000
+0:203                  'k' ( in highp float)
+0:203              'k' ( in highp float)
+0:204      Branch: Return with expression
+0:204        component-wise multiply ( temp highp float)
+0:204          'Gl' ( temp highp float)
+0:204          'Gv' ( temp highp float)
+0:207  Function Definition: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:207    Function Parameters: 
+0:207      'index' ( in highp int)
+0:207      'diffuseColor' ( in highp 3-component vector of float)
+0:207      'specularColor' ( in highp 3-component vector of float)
+0:207      'worldSpacePos' ( in highp 3-component vector of float)
+0:207      'normal' ( in highp 3-component vector of float)
+0:207      'shadowStrength' ( in highp float)
+0:207      'shadowColor' ( in highp 3-component vector of float)
+0:207      'camVector' ( in highp 3-component vector of float)
+0:207      'roughness' ( in highp float)
+0:?     Sequence
+0:210      Branch: Return with expression
+0:210        'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:213  Function Definition: TDLightingPBR(vf3;vf3;f1;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global void)
+0:213    Function Parameters: 
+0:213      'diffuseContrib' ( inout highp 3-component vector of float)
+0:213      'specularContrib' ( inout highp 3-component vector of float)
+0:213      'shadowStrengthOut' ( inout highp float)
+0:213      'index' ( in highp int)
+0:213      'diffuseColor' ( in highp 3-component vector of float)
+0:213      'specularColor' ( in highp 3-component vector of float)
+0:213      'worldSpacePos' ( in highp 3-component vector of float)
+0:213      'normal' ( in highp 3-component vector of float)
+0:213      'shadowStrength' ( in highp float)
+0:213      'shadowColor' ( in highp 3-component vector of float)
+0:213      'camVector' ( in highp 3-component vector of float)
+0:213      'roughness' ( in highp float)
+0:215    Sequence
+0:215      Sequence
+0:215        move second child to first child ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:215          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:215          Function Call: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:215            'index' ( in highp int)
+0:215            'diffuseColor' ( in highp 3-component vector of float)
+0:215            'specularColor' ( in highp 3-component vector of float)
+0:215            'worldSpacePos' ( in highp 3-component vector of float)
+0:215            'normal' ( in highp 3-component vector of float)
+0:215            'shadowStrength' ( in highp float)
+0:215            'shadowColor' ( in highp 3-component vector of float)
+0:215            'camVector' ( in highp 3-component vector of float)
+0:215            'roughness' ( in highp float)
+0:215      move second child to first child ( temp highp 3-component vector of float)
+0:215        'diffuseContrib' ( inout highp 3-component vector of float)
+0:215        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:215          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:215          Constant:
+0:215            0 (const int)
+0:216      move second child to first child ( temp highp 3-component vector of float)
+0:216        'specularContrib' ( inout highp 3-component vector of float)
+0:216        specular: direct index for structure ( global highp 3-component vector of float)
+0:216          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:216          Constant:
+0:216            1 (const int)
+0:217      move second child to first child ( temp highp float)
+0:217        'shadowStrengthOut' ( inout highp float)
+0:217        shadowStrength: direct index for structure ( global highp float)
+0:217          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:217          Constant:
+0:217            2 (const int)
+0:220  Function Definition: TDLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global void)
+0:220    Function Parameters: 
+0:220      'diffuseContrib' ( inout highp 3-component vector of float)
+0:220      'specularContrib' ( inout highp 3-component vector of float)
+0:220      'index' ( in highp int)
+0:220      'diffuseColor' ( in highp 3-component vector of float)
+0:220      'specularColor' ( in highp 3-component vector of float)
+0:220      'worldSpacePos' ( in highp 3-component vector of float)
+0:220      'normal' ( in highp 3-component vector of float)
+0:220      'shadowStrength' ( in highp float)
+0:220      'shadowColor' ( in highp 3-component vector of float)
+0:220      'camVector' ( in highp 3-component vector of float)
+0:220      'roughness' ( in highp float)
+0:222    Sequence
+0:222      Sequence
+0:222        move second child to first child ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:222          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:222          Function Call: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:222            'index' ( in highp int)
+0:222            'diffuseColor' ( in highp 3-component vector of float)
+0:222            'specularColor' ( in highp 3-component vector of float)
+0:222            'worldSpacePos' ( in highp 3-component vector of float)
+0:222            'normal' ( in highp 3-component vector of float)
+0:222            'shadowStrength' ( in highp float)
+0:222            'shadowColor' ( in highp 3-component vector of float)
+0:222            'camVector' ( in highp 3-component vector of float)
+0:222            'roughness' ( in highp float)
+0:222      move second child to first child ( temp highp 3-component vector of float)
+0:222        'diffuseContrib' ( inout highp 3-component vector of float)
+0:222        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:222          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:222          Constant:
+0:222            0 (const int)
+0:223      move second child to first child ( temp highp 3-component vector of float)
+0:223        'specularContrib' ( inout highp 3-component vector of float)
+0:223        specular: direct index for structure ( global highp 3-component vector of float)
+0:223          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:223          Constant:
+0:223            1 (const int)
+0:226  Function Definition: TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:226    Function Parameters: 
+0:226      'index' ( in highp int)
+0:226      'diffuseColor' ( in highp 3-component vector of float)
+0:226      'specularColor' ( in highp 3-component vector of float)
+0:226      'normal' ( in highp 3-component vector of float)
+0:226      'camVector' ( in highp 3-component vector of float)
+0:226      'roughness' ( in highp float)
+0:226      'ambientOcclusion' ( in highp float)
+0:?     Sequence
+0:229      Branch: Return with expression
+0:229        'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:232  Function Definition: TDEnvLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;f1; ( global void)
+0:232    Function Parameters: 
+0:232      'diffuseContrib' ( inout highp 3-component vector of float)
+0:232      'specularContrib' ( inout highp 3-component vector of float)
+0:232      'index' ( in highp int)
+0:232      'diffuseColor' ( in highp 3-component vector of float)
+0:232      'specularColor' ( in highp 3-component vector of float)
+0:232      'normal' ( in highp 3-component vector of float)
+0:232      'camVector' ( in highp 3-component vector of float)
+0:232      'roughness' ( in highp float)
+0:232      'ambientOcclusion' ( in highp float)
+0:234    Sequence
+0:234      Sequence
+0:234        move second child to first child ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:234          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:234          Function Call: TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:234            'index' ( in highp int)
+0:234            'diffuseColor' ( in highp 3-component vector of float)
+0:234            'specularColor' ( in highp 3-component vector of float)
+0:234            'normal' ( in highp 3-component vector of float)
+0:234            'camVector' ( in highp 3-component vector of float)
+0:234            'roughness' ( in highp float)
+0:234            'ambientOcclusion' ( in highp float)
+0:235      move second child to first child ( temp highp 3-component vector of float)
+0:235        'diffuseContrib' ( inout highp 3-component vector of float)
+0:235        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:235          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:235          Constant:
+0:235            0 (const int)
+0:236      move second child to first child ( temp highp 3-component vector of float)
+0:236        'specularContrib' ( inout highp 3-component vector of float)
+0:236        specular: direct index for structure ( global highp 3-component vector of float)
+0:236          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:236          Constant:
+0:236            1 (const int)
+0:239  Function Definition: TDLighting(i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:239    Function Parameters: 
+0:239      'index' ( in highp int)
+0:239      'worldSpacePos' ( in highp 3-component vector of float)
+0:239      'normal' ( in highp 3-component vector of float)
+0:239      'shadowStrength' ( in highp float)
+0:239      'shadowColor' ( in highp 3-component vector of float)
+0:239      'camVector' ( in highp 3-component vector of float)
+0:239      'shininess' ( in highp float)
+0:239      'shininess2' ( in highp float)
+0:?     Sequence
+0:242      switch
+0:242      condition
+0:242        'index' ( in highp int)
+0:242      body
+0:242        Sequence
+0:244          default: 
+0:?           Sequence
+0:245            move second child to first child ( temp highp 3-component vector of float)
+0:245              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:245                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:245                Constant:
+0:245                  0 (const int)
+0:245              Constant:
+0:245                0.000000
+0:245                0.000000
+0:245                0.000000
+0:246            move second child to first child ( temp highp 3-component vector of float)
+0:246              specular: direct index for structure ( global highp 3-component vector of float)
+0:246                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:246                Constant:
+0:246                  1 (const int)
+0:246              Constant:
+0:246                0.000000
+0:246                0.000000
+0:246                0.000000
+0:247            move second child to first child ( temp highp 3-component vector of float)
+0:247              specular2: direct index for structure ( global highp 3-component vector of float)
+0:247                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:247                Constant:
+0:247                  2 (const int)
+0:247              Constant:
+0:247                0.000000
+0:247                0.000000
+0:247                0.000000
+0:248            move second child to first child ( temp highp float)
+0:248              shadowStrength: direct index for structure ( global highp float)
+0:248                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:248                Constant:
+0:248                  3 (const int)
+0:248              Constant:
+0:248                0.000000
+0:249            Branch: Break
+0:251      Branch: Return with expression
+0:251        'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:254  Function Definition: TDLighting(vf3;vf3;vf3;f1;i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global void)
+0:254    Function Parameters: 
+0:254      'diffuseContrib' ( inout highp 3-component vector of float)
+0:254      'specularContrib' ( inout highp 3-component vector of float)
+0:254      'specularContrib2' ( inout highp 3-component vector of float)
+0:254      'shadowStrengthOut' ( inout highp float)
+0:254      'index' ( in highp int)
+0:254      'worldSpacePos' ( in highp 3-component vector of float)
+0:254      'normal' ( in highp 3-component vector of float)
+0:254      'shadowStrength' ( in highp float)
+0:254      'shadowColor' ( in highp 3-component vector of float)
+0:254      'camVector' ( in highp 3-component vector of float)
+0:254      'shininess' ( in highp float)
+0:254      'shininess2' ( in highp float)
+0:?     Sequence
+0:257      switch
+0:257      condition
+0:257        'index' ( in highp int)
+0:257      body
+0:257        Sequence
+0:259          default: 
+0:?           Sequence
+0:260            move second child to first child ( temp highp 3-component vector of float)
+0:260              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:260                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:260                Constant:
+0:260                  0 (const int)
+0:260              Constant:
+0:260                0.000000
+0:260                0.000000
+0:260                0.000000
+0:261            move second child to first child ( temp highp 3-component vector of float)
+0:261              specular: direct index for structure ( global highp 3-component vector of float)
+0:261                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:261                Constant:
+0:261                  1 (const int)
+0:261              Constant:
+0:261                0.000000
+0:261                0.000000
+0:261                0.000000
+0:262            move second child to first child ( temp highp 3-component vector of float)
+0:262              specular2: direct index for structure ( global highp 3-component vector of float)
+0:262                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:262                Constant:
+0:262                  2 (const int)
+0:262              Constant:
+0:262                0.000000
+0:262                0.000000
+0:262                0.000000
+0:263            move second child to first child ( temp highp float)
+0:263              shadowStrength: direct index for structure ( global highp float)
+0:263                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:263                Constant:
+0:263                  3 (const int)
+0:263              Constant:
+0:263                0.000000
+0:264            Branch: Break
+0:266      move second child to first child ( temp highp 3-component vector of float)
+0:266        'diffuseContrib' ( inout highp 3-component vector of float)
+0:266        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:266          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:266          Constant:
+0:266            0 (const int)
+0:267      move second child to first child ( temp highp 3-component vector of float)
+0:267        'specularContrib' ( inout highp 3-component vector of float)
+0:267        specular: direct index for structure ( global highp 3-component vector of float)
+0:267          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:267          Constant:
+0:267            1 (const int)
+0:268      move second child to first child ( temp highp 3-component vector of float)
+0:268        'specularContrib2' ( inout highp 3-component vector of float)
+0:268        specular2: direct index for structure ( global highp 3-component vector of float)
+0:268          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:268          Constant:
+0:268            2 (const int)
+0:269      move second child to first child ( temp highp float)
+0:269        'shadowStrengthOut' ( inout highp float)
+0:269        shadowStrength: direct index for structure ( global highp float)
+0:269          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:269          Constant:
+0:269            3 (const int)
+0:272  Function Definition: TDLighting(vf3;vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global void)
+0:272    Function Parameters: 
+0:272      'diffuseContrib' ( inout highp 3-component vector of float)
+0:272      'specularContrib' ( inout highp 3-component vector of float)
+0:272      'specularContrib2' ( inout highp 3-component vector of float)
+0:272      'index' ( in highp int)
+0:272      'worldSpacePos' ( in highp 3-component vector of float)
+0:272      'normal' ( in highp 3-component vector of float)
+0:272      'shadowStrength' ( in highp float)
+0:272      'shadowColor' ( in highp 3-component vector of float)
+0:272      'camVector' ( in highp 3-component vector of float)
+0:272      'shininess' ( in highp float)
+0:272      'shininess2' ( in highp float)
+0:?     Sequence
+0:275      switch
+0:275      condition
+0:275        'index' ( in highp int)
+0:275      body
+0:275        Sequence
+0:277          default: 
+0:?           Sequence
+0:278            move second child to first child ( temp highp 3-component vector of float)
+0:278              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:278                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:278                Constant:
+0:278                  0 (const int)
+0:278              Constant:
+0:278                0.000000
+0:278                0.000000
+0:278                0.000000
+0:279            move second child to first child ( temp highp 3-component vector of float)
+0:279              specular: direct index for structure ( global highp 3-component vector of float)
+0:279                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:279                Constant:
+0:279                  1 (const int)
+0:279              Constant:
+0:279                0.000000
+0:279                0.000000
+0:279                0.000000
+0:280            move second child to first child ( temp highp 3-component vector of float)
+0:280              specular2: direct index for structure ( global highp 3-component vector of float)
+0:280                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:280                Constant:
+0:280                  2 (const int)
+0:280              Constant:
+0:280                0.000000
+0:280                0.000000
+0:280                0.000000
+0:281            move second child to first child ( temp highp float)
+0:281              shadowStrength: direct index for structure ( global highp float)
+0:281                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:281                Constant:
+0:281                  3 (const int)
+0:281              Constant:
+0:281                0.000000
+0:282            Branch: Break
+0:284      move second child to first child ( temp highp 3-component vector of float)
+0:284        'diffuseContrib' ( inout highp 3-component vector of float)
+0:284        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:284          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:284          Constant:
+0:284            0 (const int)
+0:285      move second child to first child ( temp highp 3-component vector of float)
+0:285        'specularContrib' ( inout highp 3-component vector of float)
+0:285        specular: direct index for structure ( global highp 3-component vector of float)
+0:285          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:285          Constant:
+0:285            1 (const int)
+0:286      move second child to first child ( temp highp 3-component vector of float)
+0:286        'specularContrib2' ( inout highp 3-component vector of float)
+0:286        specular2: direct index for structure ( global highp 3-component vector of float)
+0:286          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:286          Constant:
+0:286            2 (const int)
+0:289  Function Definition: TDLighting(vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1; ( global void)
+0:289    Function Parameters: 
+0:289      'diffuseContrib' ( inout highp 3-component vector of float)
+0:289      'specularContrib' ( inout highp 3-component vector of float)
+0:289      'index' ( in highp int)
+0:289      'worldSpacePos' ( in highp 3-component vector of float)
+0:289      'normal' ( in highp 3-component vector of float)
+0:289      'shadowStrength' ( in highp float)
+0:289      'shadowColor' ( in highp 3-component vector of float)
+0:289      'camVector' ( in highp 3-component vector of float)
+0:289      'shininess' ( in highp float)
+0:?     Sequence
+0:292      switch
+0:292      condition
+0:292        'index' ( in highp int)
+0:292      body
+0:292        Sequence
+0:294          default: 
+0:?           Sequence
+0:295            move second child to first child ( temp highp 3-component vector of float)
+0:295              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:295                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:295                Constant:
+0:295                  0 (const int)
+0:295              Constant:
+0:295                0.000000
+0:295                0.000000
+0:295                0.000000
+0:296            move second child to first child ( temp highp 3-component vector of float)
+0:296              specular: direct index for structure ( global highp 3-component vector of float)
+0:296                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:296                Constant:
+0:296                  1 (const int)
+0:296              Constant:
+0:296                0.000000
+0:296                0.000000
+0:296                0.000000
+0:297            move second child to first child ( temp highp 3-component vector of float)
+0:297              specular2: direct index for structure ( global highp 3-component vector of float)
+0:297                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:297                Constant:
+0:297                  2 (const int)
+0:297              Constant:
+0:297                0.000000
+0:297                0.000000
+0:297                0.000000
+0:298            move second child to first child ( temp highp float)
+0:298              shadowStrength: direct index for structure ( global highp float)
+0:298                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:298                Constant:
+0:298                  3 (const int)
+0:298              Constant:
+0:298                0.000000
+0:299            Branch: Break
+0:301      move second child to first child ( temp highp 3-component vector of float)
+0:301        'diffuseContrib' ( inout highp 3-component vector of float)
+0:301        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:301          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:301          Constant:
+0:301            0 (const int)
+0:302      move second child to first child ( temp highp 3-component vector of float)
+0:302        'specularContrib' ( inout highp 3-component vector of float)
+0:302        specular: direct index for structure ( global highp 3-component vector of float)
+0:302          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:302          Constant:
+0:302            1 (const int)
+0:305  Function Definition: TDLighting(vf3;vf3;vf3;i1;vf3;vf3;vf3;f1;f1; ( global void)
+0:305    Function Parameters: 
+0:305      'diffuseContrib' ( inout highp 3-component vector of float)
+0:305      'specularContrib' ( inout highp 3-component vector of float)
+0:305      'specularContrib2' ( inout highp 3-component vector of float)
+0:305      'index' ( in highp int)
+0:305      'worldSpacePos' ( in highp 3-component vector of float)
+0:305      'normal' ( in highp 3-component vector of float)
+0:305      'camVector' ( in highp 3-component vector of float)
+0:305      'shininess' ( in highp float)
+0:305      'shininess2' ( in highp float)
+0:?     Sequence
+0:308      switch
+0:308      condition
+0:308        'index' ( in highp int)
+0:308      body
+0:308        Sequence
+0:310          default: 
+0:?           Sequence
+0:311            move second child to first child ( temp highp 3-component vector of float)
+0:311              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:311                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:311                Constant:
+0:311                  0 (const int)
+0:311              Constant:
+0:311                0.000000
+0:311                0.000000
+0:311                0.000000
+0:312            move second child to first child ( temp highp 3-component vector of float)
+0:312              specular: direct index for structure ( global highp 3-component vector of float)
+0:312                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:312                Constant:
+0:312                  1 (const int)
+0:312              Constant:
+0:312                0.000000
+0:312                0.000000
+0:312                0.000000
+0:313            move second child to first child ( temp highp 3-component vector of float)
+0:313              specular2: direct index for structure ( global highp 3-component vector of float)
+0:313                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:313                Constant:
+0:313                  2 (const int)
+0:313              Constant:
+0:313                0.000000
+0:313                0.000000
+0:313                0.000000
+0:314            move second child to first child ( temp highp float)
+0:314              shadowStrength: direct index for structure ( global highp float)
+0:314                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:314                Constant:
+0:314                  3 (const int)
+0:314              Constant:
+0:314                0.000000
+0:315            Branch: Break
+0:317      move second child to first child ( temp highp 3-component vector of float)
+0:317        'diffuseContrib' ( inout highp 3-component vector of float)
+0:317        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:317          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:317          Constant:
+0:317            0 (const int)
+0:318      move second child to first child ( temp highp 3-component vector of float)
+0:318        'specularContrib' ( inout highp 3-component vector of float)
+0:318        specular: direct index for structure ( global highp 3-component vector of float)
+0:318          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:318          Constant:
+0:318            1 (const int)
+0:319      move second child to first child ( temp highp 3-component vector of float)
+0:319        'specularContrib2' ( inout highp 3-component vector of float)
+0:319        specular2: direct index for structure ( global highp 3-component vector of float)
+0:319          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:319          Constant:
+0:319            2 (const int)
+0:322  Function Definition: TDLighting(vf3;vf3;i1;vf3;vf3;vf3;f1; ( global void)
+0:322    Function Parameters: 
+0:322      'diffuseContrib' ( inout highp 3-component vector of float)
+0:322      'specularContrib' ( inout highp 3-component vector of float)
+0:322      'index' ( in highp int)
+0:322      'worldSpacePos' ( in highp 3-component vector of float)
+0:322      'normal' ( in highp 3-component vector of float)
+0:322      'camVector' ( in highp 3-component vector of float)
+0:322      'shininess' ( in highp float)
+0:?     Sequence
+0:325      switch
+0:325      condition
+0:325        'index' ( in highp int)
+0:325      body
+0:325        Sequence
+0:327          default: 
+0:?           Sequence
+0:328            move second child to first child ( temp highp 3-component vector of float)
+0:328              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:328                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:328                Constant:
+0:328                  0 (const int)
+0:328              Constant:
+0:328                0.000000
+0:328                0.000000
+0:328                0.000000
+0:329            move second child to first child ( temp highp 3-component vector of float)
+0:329              specular: direct index for structure ( global highp 3-component vector of float)
+0:329                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:329                Constant:
+0:329                  1 (const int)
+0:329              Constant:
+0:329                0.000000
+0:329                0.000000
+0:329                0.000000
+0:330            move second child to first child ( temp highp 3-component vector of float)
+0:330              specular2: direct index for structure ( global highp 3-component vector of float)
+0:330                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:330                Constant:
+0:330                  2 (const int)
+0:330              Constant:
+0:330                0.000000
+0:330                0.000000
+0:330                0.000000
+0:331            move second child to first child ( temp highp float)
+0:331              shadowStrength: direct index for structure ( global highp float)
+0:331                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:331                Constant:
+0:331                  3 (const int)
+0:331              Constant:
+0:331                0.000000
+0:332            Branch: Break
+0:334      move second child to first child ( temp highp 3-component vector of float)
+0:334        'diffuseContrib' ( inout highp 3-component vector of float)
+0:334        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:334          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:334          Constant:
+0:334            0 (const int)
+0:335      move second child to first child ( temp highp 3-component vector of float)
+0:335        'specularContrib' ( inout highp 3-component vector of float)
+0:335        specular: direct index for structure ( global highp 3-component vector of float)
+0:335          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:335          Constant:
+0:335            1 (const int)
+0:338  Function Definition: TDLighting(vf3;i1;vf3;vf3; ( global void)
+0:338    Function Parameters: 
+0:338      'diffuseContrib' ( inout highp 3-component vector of float)
+0:338      'index' ( in highp int)
+0:338      'worldSpacePos' ( in highp 3-component vector of float)
+0:338      'normal' ( in highp 3-component vector of float)
+0:?     Sequence
+0:341      switch
+0:341      condition
+0:341        'index' ( in highp int)
+0:341      body
+0:341        Sequence
+0:343          default: 
+0:?           Sequence
+0:344            move second child to first child ( temp highp 3-component vector of float)
+0:344              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:344                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:344                Constant:
+0:344                  0 (const int)
+0:344              Constant:
+0:344                0.000000
+0:344                0.000000
+0:344                0.000000
+0:345            move second child to first child ( temp highp 3-component vector of float)
+0:345              specular: direct index for structure ( global highp 3-component vector of float)
+0:345                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:345                Constant:
+0:345                  1 (const int)
+0:345              Constant:
+0:345                0.000000
+0:345                0.000000
+0:345                0.000000
+0:346            move second child to first child ( temp highp 3-component vector of float)
+0:346              specular2: direct index for structure ( global highp 3-component vector of float)
+0:346                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:346                Constant:
+0:346                  2 (const int)
+0:346              Constant:
+0:346                0.000000
+0:346                0.000000
+0:346                0.000000
+0:347            move second child to first child ( temp highp float)
+0:347              shadowStrength: direct index for structure ( global highp float)
+0:347                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:347                Constant:
+0:347                  3 (const int)
+0:347              Constant:
+0:347                0.000000
+0:348            Branch: Break
+0:350      move second child to first child ( temp highp 3-component vector of float)
+0:350        'diffuseContrib' ( inout highp 3-component vector of float)
+0:350        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:350          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:350          Constant:
+0:350            0 (const int)
+0:353  Function Definition: TDLighting(vf3;i1;vf3;vf3;f1;vf3; ( global void)
+0:353    Function Parameters: 
+0:353      'diffuseContrib' ( inout highp 3-component vector of float)
+0:353      'index' ( in highp int)
+0:353      'worldSpacePos' ( in highp 3-component vector of float)
+0:353      'normal' ( in highp 3-component vector of float)
+0:353      'shadowStrength' ( in highp float)
+0:353      'shadowColor' ( in highp 3-component vector of float)
+0:?     Sequence
+0:356      switch
+0:356      condition
+0:356        'index' ( in highp int)
+0:356      body
+0:356        Sequence
+0:358          default: 
+0:?           Sequence
+0:359            move second child to first child ( temp highp 3-component vector of float)
+0:359              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:359                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:359                Constant:
+0:359                  0 (const int)
+0:359              Constant:
+0:359                0.000000
+0:359                0.000000
+0:359                0.000000
+0:360            move second child to first child ( temp highp 3-component vector of float)
+0:360              specular: direct index for structure ( global highp 3-component vector of float)
+0:360                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:360                Constant:
+0:360                  1 (const int)
+0:360              Constant:
+0:360                0.000000
+0:360                0.000000
+0:360                0.000000
+0:361            move second child to first child ( temp highp 3-component vector of float)
+0:361              specular2: direct index for structure ( global highp 3-component vector of float)
+0:361                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:361                Constant:
+0:361                  2 (const int)
+0:361              Constant:
+0:361                0.000000
+0:361                0.000000
+0:361                0.000000
+0:362            move second child to first child ( temp highp float)
+0:362              shadowStrength: direct index for structure ( global highp float)
+0:362                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:362                Constant:
+0:362                  3 (const int)
+0:362              Constant:
+0:362                0.000000
+0:363            Branch: Break
+0:365      move second child to first child ( temp highp 3-component vector of float)
+0:365        'diffuseContrib' ( inout highp 3-component vector of float)
+0:365        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:365          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:365          Constant:
+0:365            0 (const int)
+0:367  Function Definition: TDProjMap(i1;vf3;vf4; ( global highp 4-component vector of float)
+0:367    Function Parameters: 
+0:367      'index' ( in highp int)
+0:367      'worldSpacePos' ( in highp 3-component vector of float)
+0:367      'defaultColor' ( in highp 4-component vector of float)
+0:368    Sequence
+0:368      switch
+0:368      condition
+0:368        'index' ( in highp int)
+0:368      body
+0:368        Sequence
+0:370          default: 
+0:?           Sequence
+0:370            Branch: Return with expression
+0:370              'defaultColor' ( in highp 4-component vector of float)
+0:373  Function Definition: TDFog(vf4;vf3;i1; ( global highp 4-component vector of float)
+0:373    Function Parameters: 
+0:373      'color' ( in highp 4-component vector of float)
+0:373      'lightingSpacePosition' ( in highp 3-component vector of float)
+0:373      'cameraIndex' ( in highp int)
+0:374    Sequence
+0:374      switch
+0:374      condition
+0:374        'cameraIndex' ( in highp int)
+0:374      body
+0:374        Sequence
+0:375          default: 
+0:376          case:  with expression
+0:376            Constant:
+0:376              0 (const int)
+0:?           Sequence
+0:378            Sequence
+0:378              Branch: Return with expression
+0:378                'color' ( in highp 4-component vector of float)
+0:382  Function Definition: TDFog(vf4;vf3; ( global highp 4-component vector of float)
+0:382    Function Parameters: 
+0:382      'color' ( in highp 4-component vector of float)
+0:382      'lightingSpacePosition' ( in highp 3-component vector of float)
+0:384    Sequence
+0:384      Branch: Return with expression
+0:384        Function Call: TDFog(vf4;vf3;i1; ( global highp 4-component vector of float)
+0:384          'color' ( in highp 4-component vector of float)
+0:384          'lightingSpacePosition' ( in highp 3-component vector of float)
+0:384          Constant:
+0:384            0 (const int)
+0:386  Function Definition: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float)
+0:386    Function Parameters: 
+0:386      'index' ( in highp int)
+0:386      't' ( in highp 3-component vector of float)
+0:?     Sequence
+0:388      Sequence
+0:388        move second child to first child ( temp highp int)
+0:388          'coord' ( temp highp int)
+0:388          'index' ( in highp int)
+0:389      Sequence
+0:389        move second child to first child ( temp highp 4-component vector of float)
+0:389          'samp' ( temp highp 4-component vector of float)
+0:389          textureFetch ( global highp 4-component vector of float)
+0:389            'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer)
+0:389            'coord' ( temp highp int)
+0:390      move second child to first child ( temp highp float)
+0:390        direct index ( temp highp float)
+0:390          'v' ( temp highp 3-component vector of float)
+0:390          Constant:
+0:390            0 (const int)
+0:390        direct index ( temp highp float)
+0:390          't' ( in highp 3-component vector of float)
+0:390          Constant:
+0:390            0 (const int)
+0:391      move second child to first child ( temp highp float)
+0:391        direct index ( temp highp float)
+0:391          'v' ( temp highp 3-component vector of float)
+0:391          Constant:
+0:391            1 (const int)
+0:391        direct index ( temp highp float)
+0:391          't' ( in highp 3-component vector of float)
+0:391          Constant:
+0:391            1 (const int)
+0:392      move second child to first child ( temp highp float)
+0:392        direct index ( temp highp float)
+0:392          'v' ( temp highp 3-component vector of float)
+0:392          Constant:
+0:392            2 (const int)
+0:392        direct index ( temp highp float)
+0:392          'samp' ( temp highp 4-component vector of float)
+0:392          Constant:
+0:392            0 (const int)
+0:393      move second child to first child ( temp highp 3-component vector of float)
+0:393        vector swizzle ( temp highp 3-component vector of float)
+0:393          't' ( in highp 3-component vector of float)
+0:393          Sequence
+0:393            Constant:
+0:393              0 (const int)
+0:393            Constant:
+0:393              1 (const int)
+0:393            Constant:
+0:393              2 (const int)
+0:393        vector swizzle ( temp highp 3-component vector of float)
+0:393          'v' ( temp highp 3-component vector of float)
+0:393          Sequence
+0:393            Constant:
+0:393              0 (const int)
+0:393            Constant:
+0:393              1 (const int)
+0:393            Constant:
+0:393              2 (const int)
+0:394      Branch: Return with expression
+0:394        't' ( in highp 3-component vector of float)
+0:396  Function Definition: TDInstanceActive(i1; ( global bool)
+0:396    Function Parameters: 
+0:396      'index' ( in highp int)
+0:397    Sequence
+0:397      subtract second child into first child ( temp highp int)
+0:397        'index' ( in highp int)
+0:397        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:397          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:397          Constant:
+0:397            0 (const uint)
+0:399      Sequence
+0:399        move second child to first child ( temp highp int)
+0:399          'coord' ( temp highp int)
+0:399          'index' ( in highp int)
+0:400      Sequence
+0:400        move second child to first child ( temp highp 4-component vector of float)
+0:400          'samp' ( temp highp 4-component vector of float)
+0:400          textureFetch ( global highp 4-component vector of float)
+0:400            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:400            'coord' ( temp highp int)
+0:401      move second child to first child ( temp highp float)
+0:401        'v' ( temp highp float)
+0:401        direct index ( temp highp float)
+0:401          'samp' ( temp highp 4-component vector of float)
+0:401          Constant:
+0:401            0 (const int)
+0:402      Branch: Return with expression
+0:402        Compare Not Equal ( temp bool)
+0:402          'v' ( temp highp float)
+0:402          Constant:
+0:402            0.000000
+0:404  Function Definition: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float)
+0:404    Function Parameters: 
+0:404      'index' ( in highp int)
+0:404      'instanceActive' ( out bool)
+0:405    Sequence
+0:405      Sequence
+0:405        move second child to first child ( temp highp int)
+0:405          'origIndex' ( temp highp int)
+0:405          'index' ( in highp int)
+0:406      subtract second child into first child ( temp highp int)
+0:406        'index' ( in highp int)
+0:406        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:406          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:406          Constant:
+0:406            0 (const uint)
+0:408      Sequence
+0:408        move second child to first child ( temp highp int)
+0:408          'coord' ( temp highp int)
+0:408          'index' ( in highp int)
+0:409      Sequence
+0:409        move second child to first child ( temp highp 4-component vector of float)
+0:409          'samp' ( temp highp 4-component vector of float)
+0:409          textureFetch ( global highp 4-component vector of float)
+0:409            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:409            'coord' ( temp highp int)
+0:410      move second child to first child ( temp highp float)
+0:410        direct index ( temp highp float)
+0:410          'v' ( temp highp 3-component vector of float)
+0:410          Constant:
+0:410            0 (const int)
+0:410        direct index ( temp highp float)
+0:410          'samp' ( temp highp 4-component vector of float)
+0:410          Constant:
+0:410            1 (const int)
+0:411      move second child to first child ( temp highp float)
+0:411        direct index ( temp highp float)
+0:411          'v' ( temp highp 3-component vector of float)
+0:411          Constant:
+0:411            1 (const int)
+0:411        direct index ( temp highp float)
+0:411          'samp' ( temp highp 4-component vector of float)
+0:411          Constant:
+0:411            2 (const int)
+0:412      move second child to first child ( temp highp float)
+0:412        direct index ( temp highp float)
+0:412          'v' ( temp highp 3-component vector of float)
+0:412          Constant:
+0:412            2 (const int)
+0:412        direct index ( temp highp float)
+0:412          'samp' ( temp highp 4-component vector of float)
+0:412          Constant:
+0:412            3 (const int)
+0:413      move second child to first child ( temp bool)
+0:413        'instanceActive' ( out bool)
+0:413        Compare Not Equal ( temp bool)
+0:413          direct index ( temp highp float)
+0:413            'samp' ( temp highp 4-component vector of float)
+0:413            Constant:
+0:413              0 (const int)
+0:413          Constant:
+0:413            0.000000
+0:414      Branch: Return with expression
+0:414        'v' ( temp highp 3-component vector of float)
+0:416  Function Definition: TDInstanceTranslate(i1; ( global highp 3-component vector of float)
+0:416    Function Parameters: 
+0:416      'index' ( in highp int)
+0:417    Sequence
+0:417      subtract second child into first child ( temp highp int)
+0:417        'index' ( in highp int)
+0:417        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:417          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:417          Constant:
+0:417            0 (const uint)
+0:419      Sequence
+0:419        move second child to first child ( temp highp int)
+0:419          'coord' ( temp highp int)
+0:419          'index' ( in highp int)
+0:420      Sequence
+0:420        move second child to first child ( temp highp 4-component vector of float)
+0:420          'samp' ( temp highp 4-component vector of float)
+0:420          textureFetch ( global highp 4-component vector of float)
+0:420            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:420            'coord' ( temp highp int)
+0:421      move second child to first child ( temp highp float)
+0:421        direct index ( temp highp float)
+0:421          'v' ( temp highp 3-component vector of float)
+0:421          Constant:
+0:421            0 (const int)
+0:421        direct index ( temp highp float)
+0:421          'samp' ( temp highp 4-component vector of float)
+0:421          Constant:
+0:421            1 (const int)
+0:422      move second child to first child ( temp highp float)
+0:422        direct index ( temp highp float)
+0:422          'v' ( temp highp 3-component vector of float)
+0:422          Constant:
+0:422            1 (const int)
+0:422        direct index ( temp highp float)
+0:422          'samp' ( temp highp 4-component vector of float)
+0:422          Constant:
+0:422            2 (const int)
+0:423      move second child to first child ( temp highp float)
+0:423        direct index ( temp highp float)
+0:423          'v' ( temp highp 3-component vector of float)
+0:423          Constant:
+0:423            2 (const int)
+0:423        direct index ( temp highp float)
+0:423          'samp' ( temp highp 4-component vector of float)
+0:423          Constant:
+0:423            3 (const int)
+0:424      Branch: Return with expression
+0:424        'v' ( temp highp 3-component vector of float)
+0:426  Function Definition: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float)
+0:426    Function Parameters: 
+0:426      'index' ( in highp int)
+0:427    Sequence
+0:427      subtract second child into first child ( temp highp int)
+0:427        'index' ( in highp int)
+0:427        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:427          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:427          Constant:
+0:427            0 (const uint)
+0:428      Sequence
+0:428        move second child to first child ( temp highp 3-component vector of float)
+0:428          'v' ( temp highp 3-component vector of float)
+0:428          Constant:
+0:428            0.000000
+0:428            0.000000
+0:428            0.000000
+0:429      Sequence
+0:429        move second child to first child ( temp highp 3X3 matrix of float)
+0:429          'm' ( temp highp 3X3 matrix of float)
+0:429          Constant:
+0:429            1.000000
+0:429            0.000000
+0:429            0.000000
+0:429            0.000000
+0:429            1.000000
+0:429            0.000000
+0:429            0.000000
+0:429            0.000000
+0:429            1.000000
+0:433      Branch: Return with expression
+0:433        'm' ( temp highp 3X3 matrix of float)
+0:435  Function Definition: TDInstanceScale(i1; ( global highp 3-component vector of float)
+0:435    Function Parameters: 
+0:435      'index' ( in highp int)
+0:436    Sequence
+0:436      subtract second child into first child ( temp highp int)
+0:436        'index' ( in highp int)
+0:436        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:436          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:436          Constant:
+0:436            0 (const uint)
+0:437      Sequence
+0:437        move second child to first child ( temp highp 3-component vector of float)
+0:437          'v' ( temp highp 3-component vector of float)
+0:437          Constant:
+0:437            1.000000
+0:437            1.000000
+0:437            1.000000
+0:438      Branch: Return with expression
+0:438        'v' ( temp highp 3-component vector of float)
+0:440  Function Definition: TDInstancePivot(i1; ( global highp 3-component vector of float)
+0:440    Function Parameters: 
+0:440      'index' ( in highp int)
+0:441    Sequence
+0:441      subtract second child into first child ( temp highp int)
+0:441        'index' ( in highp int)
+0:441        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:441          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:441          Constant:
+0:441            0 (const uint)
+0:442      Sequence
+0:442        move second child to first child ( temp highp 3-component vector of float)
+0:442          'v' ( temp highp 3-component vector of float)
+0:442          Constant:
+0:442            0.000000
+0:442            0.000000
+0:442            0.000000
+0:443      Branch: Return with expression
+0:443        'v' ( temp highp 3-component vector of float)
+0:445  Function Definition: TDInstanceRotTo(i1; ( global highp 3-component vector of float)
+0:445    Function Parameters: 
+0:445      'index' ( in highp int)
+0:446    Sequence
+0:446      subtract second child into first child ( temp highp int)
+0:446        'index' ( in highp int)
+0:446        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:446          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:446          Constant:
+0:446            0 (const uint)
+0:447      Sequence
+0:447        move second child to first child ( temp highp 3-component vector of float)
+0:447          'v' ( temp highp 3-component vector of float)
+0:447          Constant:
+0:447            0.000000
+0:447            0.000000
+0:447            1.000000
+0:448      Branch: Return with expression
+0:448        'v' ( temp highp 3-component vector of float)
+0:450  Function Definition: TDInstanceRotUp(i1; ( global highp 3-component vector of float)
+0:450    Function Parameters: 
+0:450      'index' ( in highp int)
+0:451    Sequence
+0:451      subtract second child into first child ( temp highp int)
+0:451        'index' ( in highp int)
+0:451        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:451          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:451          Constant:
+0:451            0 (const uint)
+0:452      Sequence
+0:452        move second child to first child ( temp highp 3-component vector of float)
+0:452          'v' ( temp highp 3-component vector of float)
+0:452          Constant:
+0:452            0.000000
+0:452            1.000000
+0:452            0.000000
+0:453      Branch: Return with expression
+0:453        'v' ( temp highp 3-component vector of float)
+0:455  Function Definition: TDInstanceMat(i1; ( global highp 4X4 matrix of float)
+0:455    Function Parameters: 
+0:455      'id' ( in highp int)
+0:456    Sequence
+0:456      Sequence
+0:456        move second child to first child ( temp bool)
+0:456          'instanceActive' ( temp bool)
+0:456          Constant:
+0:456            true (const bool)
+0:457      Sequence
+0:457        move second child to first child ( temp highp 3-component vector of float)
+0:457          't' ( temp highp 3-component vector of float)
+0:457          Function Call: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float)
+0:457            'id' ( in highp int)
+0:457            'instanceActive' ( temp bool)
+0:458      Test condition and select ( temp void)
+0:458        Condition
+0:458        Negate conditional ( temp bool)
+0:458          'instanceActive' ( temp bool)
+0:458        true case
+0:460        Sequence
+0:460          Branch: Return with expression
+0:460            Constant:
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:462      Sequence
+0:462        move second child to first child ( temp highp 4X4 matrix of float)
+0:462          'm' ( temp highp 4X4 matrix of float)
+0:462          Constant:
+0:462            1.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            1.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            1.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            1.000000
+0:464      Sequence
+0:464        Sequence
+0:464          move second child to first child ( temp highp 3-component vector of float)
+0:464            'tt' ( temp highp 3-component vector of float)
+0:464            't' ( temp highp 3-component vector of float)
+0:465        add second child into first child ( temp highp float)
+0:465          direct index ( temp highp float)
+0:465            direct index ( temp highp 4-component vector of float)
+0:465              'm' ( temp highp 4X4 matrix of float)
+0:465              Constant:
+0:465                3 (const int)
+0:465            Constant:
+0:465              0 (const int)
+0:465          component-wise multiply ( temp highp float)
+0:465            direct index ( temp highp float)
+0:465              direct index ( temp highp 4-component vector of float)
+0:465                'm' ( temp highp 4X4 matrix of float)
+0:465                Constant:
+0:465                  0 (const int)
+0:465              Constant:
+0:465                0 (const int)
+0:465            direct index ( temp highp float)
+0:465              'tt' ( temp highp 3-component vector of float)
+0:465              Constant:
+0:465                0 (const int)
+0:466        add second child into first child ( temp highp float)
+0:466          direct index ( temp highp float)
+0:466            direct index ( temp highp 4-component vector of float)
+0:466              'm' ( temp highp 4X4 matrix of float)
+0:466              Constant:
+0:466                3 (const int)
+0:466            Constant:
+0:466              1 (const int)
+0:466          component-wise multiply ( temp highp float)
+0:466            direct index ( temp highp float)
+0:466              direct index ( temp highp 4-component vector of float)
+0:466                'm' ( temp highp 4X4 matrix of float)
+0:466                Constant:
+0:466                  0 (const int)
+0:466              Constant:
+0:466                1 (const int)
+0:466            direct index ( temp highp float)
+0:466              'tt' ( temp highp 3-component vector of float)
+0:466              Constant:
+0:466                0 (const int)
+0:467        add second child into first child ( temp highp float)
+0:467          direct index ( temp highp float)
+0:467            direct index ( temp highp 4-component vector of float)
+0:467              'm' ( temp highp 4X4 matrix of float)
+0:467              Constant:
+0:467                3 (const int)
+0:467            Constant:
+0:467              2 (const int)
+0:467          component-wise multiply ( temp highp float)
+0:467            direct index ( temp highp float)
+0:467              direct index ( temp highp 4-component vector of float)
+0:467                'm' ( temp highp 4X4 matrix of float)
+0:467                Constant:
+0:467                  0 (const int)
+0:467              Constant:
+0:467                2 (const int)
+0:467            direct index ( temp highp float)
+0:467              'tt' ( temp highp 3-component vector of float)
+0:467              Constant:
+0:467                0 (const int)
+0:468        add second child into first child ( temp highp float)
+0:468          direct index ( temp highp float)
+0:468            direct index ( temp highp 4-component vector of float)
+0:468              'm' ( temp highp 4X4 matrix of float)
+0:468              Constant:
+0:468                3 (const int)
+0:468            Constant:
+0:468              3 (const int)
+0:468          component-wise multiply ( temp highp float)
+0:468            direct index ( temp highp float)
+0:468              direct index ( temp highp 4-component vector of float)
+0:468                'm' ( temp highp 4X4 matrix of float)
+0:468                Constant:
+0:468                  0 (const int)
+0:468              Constant:
+0:468                3 (const int)
+0:468            direct index ( temp highp float)
+0:468              'tt' ( temp highp 3-component vector of float)
+0:468              Constant:
+0:468                0 (const int)
+0:469        add second child into first child ( temp highp float)
+0:469          direct index ( temp highp float)
+0:469            direct index ( temp highp 4-component vector of float)
+0:469              'm' ( temp highp 4X4 matrix of float)
+0:469              Constant:
+0:469                3 (const int)
+0:469            Constant:
+0:469              0 (const int)
+0:469          component-wise multiply ( temp highp float)
+0:469            direct index ( temp highp float)
+0:469              direct index ( temp highp 4-component vector of float)
+0:469                'm' ( temp highp 4X4 matrix of float)
+0:469                Constant:
+0:469                  1 (const int)
+0:469              Constant:
+0:469                0 (const int)
+0:469            direct index ( temp highp float)
+0:469              'tt' ( temp highp 3-component vector of float)
+0:469              Constant:
+0:469                1 (const int)
+0:470        add second child into first child ( temp highp float)
+0:470          direct index ( temp highp float)
+0:470            direct index ( temp highp 4-component vector of float)
+0:470              'm' ( temp highp 4X4 matrix of float)
+0:470              Constant:
+0:470                3 (const int)
+0:470            Constant:
+0:470              1 (const int)
+0:470          component-wise multiply ( temp highp float)
+0:470            direct index ( temp highp float)
+0:470              direct index ( temp highp 4-component vector of float)
+0:470                'm' ( temp highp 4X4 matrix of float)
+0:470                Constant:
+0:470                  1 (const int)
+0:470              Constant:
+0:470                1 (const int)
+0:470            direct index ( temp highp float)
+0:470              'tt' ( temp highp 3-component vector of float)
+0:470              Constant:
+0:470                1 (const int)
+0:471        add second child into first child ( temp highp float)
+0:471          direct index ( temp highp float)
+0:471            direct index ( temp highp 4-component vector of float)
+0:471              'm' ( temp highp 4X4 matrix of float)
+0:471              Constant:
+0:471                3 (const int)
+0:471            Constant:
+0:471              2 (const int)
+0:471          component-wise multiply ( temp highp float)
+0:471            direct index ( temp highp float)
+0:471              direct index ( temp highp 4-component vector of float)
+0:471                'm' ( temp highp 4X4 matrix of float)
+0:471                Constant:
+0:471                  1 (const int)
+0:471              Constant:
+0:471                2 (const int)
+0:471            direct index ( temp highp float)
+0:471              'tt' ( temp highp 3-component vector of float)
+0:471              Constant:
+0:471                1 (const int)
+0:472        add second child into first child ( temp highp float)
+0:472          direct index ( temp highp float)
+0:472            direct index ( temp highp 4-component vector of float)
+0:472              'm' ( temp highp 4X4 matrix of float)
+0:472              Constant:
+0:472                3 (const int)
+0:472            Constant:
+0:472              3 (const int)
+0:472          component-wise multiply ( temp highp float)
+0:472            direct index ( temp highp float)
+0:472              direct index ( temp highp 4-component vector of float)
+0:472                'm' ( temp highp 4X4 matrix of float)
+0:472                Constant:
+0:472                  1 (const int)
+0:472              Constant:
+0:472                3 (const int)
+0:472            direct index ( temp highp float)
+0:472              'tt' ( temp highp 3-component vector of float)
+0:472              Constant:
+0:472                1 (const int)
+0:473        add second child into first child ( temp highp float)
+0:473          direct index ( temp highp float)
+0:473            direct index ( temp highp 4-component vector of float)
+0:473              'm' ( temp highp 4X4 matrix of float)
+0:473              Constant:
+0:473                3 (const int)
+0:473            Constant:
+0:473              0 (const int)
+0:473          component-wise multiply ( temp highp float)
+0:473            direct index ( temp highp float)
+0:473              direct index ( temp highp 4-component vector of float)
+0:473                'm' ( temp highp 4X4 matrix of float)
+0:473                Constant:
+0:473                  2 (const int)
+0:473              Constant:
+0:473                0 (const int)
+0:473            direct index ( temp highp float)
+0:473              'tt' ( temp highp 3-component vector of float)
+0:473              Constant:
+0:473                2 (const int)
+0:474        add second child into first child ( temp highp float)
+0:474          direct index ( temp highp float)
+0:474            direct index ( temp highp 4-component vector of float)
+0:474              'm' ( temp highp 4X4 matrix of float)
+0:474              Constant:
+0:474                3 (const int)
+0:474            Constant:
+0:474              1 (const int)
+0:474          component-wise multiply ( temp highp float)
+0:474            direct index ( temp highp float)
+0:474              direct index ( temp highp 4-component vector of float)
+0:474                'm' ( temp highp 4X4 matrix of float)
+0:474                Constant:
+0:474                  2 (const int)
+0:474              Constant:
+0:474                1 (const int)
+0:474            direct index ( temp highp float)
+0:474              'tt' ( temp highp 3-component vector of float)
+0:474              Constant:
+0:474                2 (const int)
+0:475        add second child into first child ( temp highp float)
+0:475          direct index ( temp highp float)
+0:475            direct index ( temp highp 4-component vector of float)
+0:475              'm' ( temp highp 4X4 matrix of float)
+0:475              Constant:
+0:475                3 (const int)
+0:475            Constant:
+0:475              2 (const int)
+0:475          component-wise multiply ( temp highp float)
+0:475            direct index ( temp highp float)
+0:475              direct index ( temp highp 4-component vector of float)
+0:475                'm' ( temp highp 4X4 matrix of float)
+0:475                Constant:
+0:475                  2 (const int)
+0:475              Constant:
+0:475                2 (const int)
+0:475            direct index ( temp highp float)
+0:475              'tt' ( temp highp 3-component vector of float)
+0:475              Constant:
+0:475                2 (const int)
+0:476        add second child into first child ( temp highp float)
+0:476          direct index ( temp highp float)
+0:476            direct index ( temp highp 4-component vector of float)
+0:476              'm' ( temp highp 4X4 matrix of float)
+0:476              Constant:
+0:476                3 (const int)
+0:476            Constant:
+0:476              3 (const int)
+0:476          component-wise multiply ( temp highp float)
+0:476            direct index ( temp highp float)
+0:476              direct index ( temp highp 4-component vector of float)
+0:476                'm' ( temp highp 4X4 matrix of float)
+0:476                Constant:
+0:476                  2 (const int)
+0:476              Constant:
+0:476                3 (const int)
+0:476            direct index ( temp highp float)
+0:476              'tt' ( temp highp 3-component vector of float)
+0:476              Constant:
+0:476                2 (const int)
+0:478      Branch: Return with expression
+0:478        'm' ( temp highp 4X4 matrix of float)
+0:480  Function Definition: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:480    Function Parameters: 
+0:480      'id' ( in highp int)
+0:481    Sequence
+0:481      Sequence
+0:481        move second child to first child ( temp highp 3X3 matrix of float)
+0:481          'm' ( temp highp 3X3 matrix of float)
+0:481          Constant:
+0:481            1.000000
+0:481            0.000000
+0:481            0.000000
+0:481            0.000000
+0:481            1.000000
+0:481            0.000000
+0:481            0.000000
+0:481            0.000000
+0:481            1.000000
+0:482      Branch: Return with expression
+0:482        'm' ( temp highp 3X3 matrix of float)
+0:484  Function Definition: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float)
+0:484    Function Parameters: 
+0:484      'id' ( in highp int)
+0:485    Sequence
+0:485      Sequence
+0:485        move second child to first child ( temp highp 3X3 matrix of float)
+0:485          'm' ( temp highp 3X3 matrix of float)
+0:485          Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:485            'id' ( in highp int)
+0:486      Branch: Return with expression
+0:486        'm' ( temp highp 3X3 matrix of float)
+0:488  Function Definition: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float)
+0:488    Function Parameters: 
+0:488      'index' ( in highp int)
+0:488      'curColor' ( in highp 4-component vector of float)
+0:489    Sequence
+0:489      subtract second child into first child ( temp highp int)
+0:489        'index' ( in highp int)
+0:489        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:489          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:489          Constant:
+0:489            0 (const uint)
+0:491      Sequence
+0:491        move second child to first child ( temp highp int)
+0:491          'coord' ( temp highp int)
+0:491          'index' ( in highp int)
+0:492      Sequence
+0:492        move second child to first child ( temp highp 4-component vector of float)
+0:492          'samp' ( temp highp 4-component vector of float)
+0:492          textureFetch ( global highp 4-component vector of float)
+0:492            'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer)
+0:492            'coord' ( temp highp int)
+0:493      move second child to first child ( temp highp float)
+0:493        direct index ( temp highp float)
+0:493          'v' ( temp highp 4-component vector of float)
+0:493          Constant:
+0:493            0 (const int)
+0:493        direct index ( temp highp float)
+0:493          'samp' ( temp highp 4-component vector of float)
+0:493          Constant:
+0:493            0 (const int)
+0:494      move second child to first child ( temp highp float)
+0:494        direct index ( temp highp float)
+0:494          'v' ( temp highp 4-component vector of float)
+0:494          Constant:
+0:494            1 (const int)
+0:494        direct index ( temp highp float)
+0:494          'samp' ( temp highp 4-component vector of float)
+0:494          Constant:
+0:494            1 (const int)
+0:495      move second child to first child ( temp highp float)
+0:495        direct index ( temp highp float)
+0:495          'v' ( temp highp 4-component vector of float)
+0:495          Constant:
+0:495            2 (const int)
+0:495        direct index ( temp highp float)
+0:495          'samp' ( temp highp 4-component vector of float)
+0:495          Constant:
+0:495            2 (const int)
+0:496      move second child to first child ( temp highp float)
+0:496        direct index ( temp highp float)
+0:496          'v' ( temp highp 4-component vector of float)
+0:496          Constant:
+0:496            3 (const int)
+0:496        Constant:
+0:496          1.000000
+0:497      move second child to first child ( temp highp float)
+0:497        direct index ( temp highp float)
+0:497          'curColor' ( in highp 4-component vector of float)
+0:497          Constant:
+0:497            0 (const int)
+0:497        direct index ( temp highp float)
+0:497          'v' ( temp highp 4-component vector of float)
+0:497          Constant:
+0:497            0 (const int)
+0:499      move second child to first child ( temp highp float)
+0:499        direct index ( temp highp float)
+0:499          'curColor' ( in highp 4-component vector of float)
+0:499          Constant:
+0:499            1 (const int)
+0:499        direct index ( temp highp float)
+0:499          'v' ( temp highp 4-component vector of float)
+0:499          Constant:
+0:499            1 (const int)
+0:501      move second child to first child ( temp highp float)
+0:501        direct index ( temp highp float)
+0:501          'curColor' ( in highp 4-component vector of float)
+0:501          Constant:
+0:501            2 (const int)
+0:501        direct index ( temp highp float)
+0:501          'v' ( temp highp 4-component vector of float)
+0:501          Constant:
+0:501            2 (const int)
+0:503      Branch: Return with expression
+0:503        'curColor' ( in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'sTDNoiseMap' ( uniform highp sampler2D)
+0:?     'sTDSineLookup' ( uniform highp sampler1D)
+0:?     'sTDWhite2D' ( uniform highp sampler2D)
+0:?     'sTDWhite3D' ( uniform highp sampler3D)
+0:?     'sTDWhite2DArray' ( uniform highp sampler2DArray)
+0:?     'sTDWhiteCube' ( uniform highp samplerCube)
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position,  global highp 3-component vector of float direction,  global highp 3-component vector of float diffuse,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float lightSize,  global highp 4-component vector of float misc,  global highp 4-component vector of float coneLookupScaleBias,  global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix,  global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights})
+0:?     'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs})
+0:?     'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:?     'anon@4' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor,  global highp int renderTOPCameraIndex} uTDCamInfos})
+0:?     'anon@5' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float viewport,  global highp 4-component vector of float viewportRes,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor} uTDGeneral})
+0:?     'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:?     'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer)
+0:?     'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer)
+
+vk.relaxed.stagelink.0.2.frag
+Shader version: 460
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2  Function Definition: TDOutputSwizzle(vf4; ( global highp 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'c' ( in highp 4-component vector of float)
+0:4    Sequence
+0:4      Branch: Return with expression
+0:4        vector swizzle ( temp highp 4-component vector of float)
+0:4          'c' ( in highp 4-component vector of float)
+0:4          Sequence
+0:4            Constant:
+0:4              0 (const int)
+0:4            Constant:
+0:4              1 (const int)
+0:4            Constant:
+0:4              2 (const int)
+0:4            Constant:
+0:4              3 (const int)
+0:6  Function Definition: TDOutputSwizzle(vu4; ( global highp 4-component vector of uint)
+0:6    Function Parameters: 
+0:6      'c' ( in highp 4-component vector of uint)
+0:8    Sequence
+0:8      Branch: Return with expression
+0:8        vector swizzle ( temp highp 4-component vector of uint)
+0:8          'c' ( in highp 4-component vector of uint)
+0:8          Sequence
+0:8            Constant:
+0:8              0 (const int)
+0:8            Constant:
+0:8              1 (const int)
+0:8            Constant:
+0:8              2 (const int)
+0:8            Constant:
+0:8              3 (const int)
+0:?   Linker Objects
+
+
+Linked vertex stage:
+
+
+Linked fragment stage:
+
+
+Shader version: 460
+0:? Sequence
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:15    Sequence
+0:15      Sequence
+0:15        Sequence
+0:15          move second child to first child ( temp highp 3-component vector of float)
+0:15            'texcoord' ( temp highp 3-component vector of float)
+0:15            Function Call: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float)
+0:15              direct index (layout( location=3) temp highp 3-component vector of float)
+0:15                'uv' (layout( location=3) in 8-element array of highp 3-component vector of float)
+0:15                Constant:
+0:15                  0 (const int)
+0:16        move second child to first child ( temp highp 3-component vector of float)
+0:16          vector swizzle ( temp highp 3-component vector of float)
+0:16            texCoord0: direct index for structure ( out highp 3-component vector of float)
+0:16              'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:16              Constant:
+0:16                2 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16              Constant:
+0:16                2 (const int)
+0:16          vector swizzle ( temp highp 3-component vector of float)
+0:16            'texcoord' ( temp highp 3-component vector of float)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16              Constant:
+0:16                2 (const int)
+0:20      move second child to first child ( temp highp int)
+0:20        instance: direct index for structure ( flat out highp int)
+0:20          'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:20          Constant:
+0:20            4 (const int)
+0:20        Function Call: TDInstanceID( ( global highp int)
+0:21      Sequence
+0:21        move second child to first child ( temp highp 4-component vector of float)
+0:21          'worldSpacePos' ( temp highp 4-component vector of float)
+0:21          Function Call: TDDeform(vf3; ( global highp 4-component vector of float)
+0:21            'P' (layout( location=0) in highp 3-component vector of float)
+0:22      Sequence
+0:22        move second child to first child ( temp highp 3-component vector of float)
+0:22          'uvUnwrapCoord' ( temp highp 3-component vector of float)
+0:22          Function Call: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float)
+0:22            Function Call: TDUVUnwrapCoord( ( global highp 3-component vector of float)
+0:23      move second child to first child ( temp highp 4-component vector of float)
+0:23        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:23          'anon@4' ( 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:23          Constant:
+0:23            0 (const uint)
+0:23        Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float)
+0:23          'worldSpacePos' ( temp highp 4-component vector of float)
+0:23          'uvUnwrapCoord' ( temp highp 3-component vector of float)
+0:32      Sequence
+0:32        move second child to first child ( temp highp int)
+0:32          'cameraIndex' ( temp highp int)
+0:32          Function Call: TDCameraIndex( ( global highp int)
+0:33      move second child to first child ( temp highp int)
+0:33        cameraIndex: direct index for structure ( flat out highp int)
+0:33          'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:33          Constant:
+0:33            3 (const int)
+0:33        'cameraIndex' ( temp highp int)
+0:34      move second child to first child ( temp highp 3-component vector of float)
+0:34        vector swizzle ( temp highp 3-component vector of float)
+0:34          worldSpacePos: direct index for structure ( out highp 3-component vector of float)
+0:34            'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34            Constant:
+0:34              2 (const int)
+0:34        vector swizzle ( temp highp 3-component vector of float)
+0:34          'worldSpacePos' ( temp highp 4-component vector of float)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34            Constant:
+0:34              2 (const int)
+0:35      move second child to first child ( temp highp 4-component vector of float)
+0:35        color: direct index for structure ( out highp 4-component vector of float)
+0:35          'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:35          Constant:
+0:35            0 (const int)
+0:35        Function Call: TDInstanceColor(vf4; ( global highp 4-component vector of float)
+0:35          'Cd' (layout( location=2) in highp 4-component vector of float)
+0:176  Function Definition: iTDCamToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float)
+0:176    Function Parameters: 
+0:176      'v' ( in highp 4-component vector of float)
+0:176      'uv' ( in highp 3-component vector of float)
+0:176      'cameraIndex' ( in highp int)
+0:176      'applyPickMod' ( in bool)
+0:178    Sequence
+0:178      Test condition and select ( temp void)
+0:178        Condition
+0:178        Negate conditional ( temp bool)
+0:178          Function Call: TDInstanceActive( ( global bool)
+0:178        true case
+0:179        Branch: Return with expression
+0:179          Constant:
+0:179            2.000000
+0:179            2.000000
+0:179            2.000000
+0:179            0.000000
+0:180      move second child to first child ( temp highp 4-component vector of float)
+0:180        'v' ( in highp 4-component vector of float)
+0:180        matrix-times-vector ( temp highp 4-component vector of float)
+0:180          proj: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float)
+0:180            direct index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:180              uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:180                'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:180                Constant:
+0:180                  0 (const uint)
+0:180              Constant:
+0:180                0 (const int)
+0:180            Constant:
+0:180              8 (const int)
+0:180          'v' ( in highp 4-component vector of float)
+0:181      Branch: Return with expression
+0:181        'v' ( in highp 4-component vector of float)
+0:183  Function Definition: iTDWorldToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float)
+0:183    Function Parameters: 
+0:183      'v' ( in highp 4-component vector of float)
+0:183      'uv' ( in highp 3-component vector of float)
+0:183      'cameraIndex' ( in highp int)
+0:183      'applyPickMod' ( in bool)
+0:184    Sequence
+0:184      Test condition and select ( temp void)
+0:184        Condition
+0:184        Negate conditional ( temp bool)
+0:184          Function Call: TDInstanceActive( ( global bool)
+0:184        true case
+0:185        Branch: Return with expression
+0:185          Constant:
+0:185            2.000000
+0:185            2.000000
+0:185            2.000000
+0:185            0.000000
+0:186      move second child to first child ( temp highp 4-component vector of float)
+0:186        'v' ( in highp 4-component vector of float)
+0:186        matrix-times-vector ( temp highp 4-component vector of float)
+0:186          camProj: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float)
+0:186            direct index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:186              uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:186                'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:186                Constant:
+0:186                  0 (const uint)
+0:186              Constant:
+0:186                0 (const int)
+0:186            Constant:
+0:186              6 (const int)
+0:186          'v' ( in highp 4-component vector of float)
+0:187      Branch: Return with expression
+0:187        'v' ( in highp 4-component vector of float)
+0:193  Function Definition: TDInstanceID( ( global highp int)
+0:193    Function Parameters: 
+0:194    Sequence
+0:194      Branch: Return with expression
+0:194        add ( temp highp int)
+0:194          'gl_InstanceIndex' ( in highp int InstanceIndex)
+0:194          uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:194            'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:194            Constant:
+0:194              0 (const uint)
+0:196  Function Definition: TDCameraIndex( ( global highp int)
+0:196    Function Parameters: 
+0:197    Sequence
+0:197      Branch: Return with expression
+0:197        Constant:
+0:197          0 (const int)
+0:199  Function Definition: TDUVUnwrapCoord( ( global highp 3-component vector of float)
+0:199    Function Parameters: 
+0:200    Sequence
+0:200      Branch: Return with expression
+0:200        direct index (layout( location=3) temp highp 3-component vector of float)
+0:200          'uv' (layout( location=3) in 8-element array of highp 3-component vector of float)
+0:200          Constant:
+0:200            0 (const int)
+0:205  Function Definition: TDPickID( ( global highp int)
+0:205    Function Parameters: 
+0:209    Sequence
+0:209      Branch: Return with expression
+0:209        Constant:
+0:209          0 (const int)
+0:212  Function Definition: iTDConvertPickId(i1; ( global highp float)
+0:212    Function Parameters: 
+0:212      'id' ( in highp int)
+0:213    Sequence
+0:213      or second child into first child ( temp highp int)
+0:213        'id' ( in highp int)
+0:213        Constant:
+0:213          1073741824 (const int)
+0:214      Branch: Return with expression
+0:214        intBitsToFloat ( global highp float)
+0:214          'id' ( in highp int)
+0:217  Function Definition: TDWritePickingValues( ( global void)
+0:217    Function Parameters: 
+0:224  Function Definition: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float)
+0:224    Function Parameters: 
+0:224      'v' ( in highp 4-component vector of float)
+0:224      'uv' ( in highp 3-component vector of float)
+0:226    Sequence
+0:226      Branch: Return with expression
+0:226        Function Call: iTDWorldToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float)
+0:226          'v' ( in highp 4-component vector of float)
+0:226          'uv' ( in highp 3-component vector of float)
+0:226          Function Call: TDCameraIndex( ( global highp int)
+0:226          Constant:
+0:226            true (const bool)
+0:228  Function Definition: TDWorldToProj(vf3;vf3; ( global highp 4-component vector of float)
+0:228    Function Parameters: 
+0:228      'v' ( in highp 3-component vector of float)
+0:228      'uv' ( in highp 3-component vector of float)
+0:230    Sequence
+0:230      Branch: Return with expression
+0:230        Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float)
+0:230          Construct vec4 ( temp highp 4-component vector of float)
+0:230            'v' ( in highp 3-component vector of float)
+0:230            Constant:
+0:230              1.000000
+0:230          'uv' ( in highp 3-component vector of float)
+0:232  Function Definition: TDWorldToProj(vf4; ( global highp 4-component vector of float)
+0:232    Function Parameters: 
+0:232      'v' ( in highp 4-component vector of float)
+0:234    Sequence
+0:234      Branch: Return with expression
+0:234        Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float)
+0:234          'v' ( in highp 4-component vector of float)
+0:234          Constant:
+0:234            0.000000
+0:234            0.000000
+0:234            0.000000
+0:236  Function Definition: TDWorldToProj(vf3; ( global highp 4-component vector of float)
+0:236    Function Parameters: 
+0:236      'v' ( in highp 3-component vector of float)
+0:238    Sequence
+0:238      Branch: Return with expression
+0:238        Function Call: TDWorldToProj(vf4; ( global highp 4-component vector of float)
+0:238          Construct vec4 ( temp highp 4-component vector of float)
+0:238            'v' ( in highp 3-component vector of float)
+0:238            Constant:
+0:238              1.000000
+0:240  Function Definition: TDPointColor( ( global highp 4-component vector of float)
+0:240    Function Parameters: 
+0:241    Sequence
+0:241      Branch: Return with expression
+0:241        'Cd' (layout( location=2) in highp 4-component vector of float)
+0:114  Function Definition: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float)
+0:114    Function Parameters: 
+0:114      'index' ( in highp int)
+0:114      't' ( in highp 3-component vector of float)
+0:?     Sequence
+0:116      Sequence
+0:116        move second child to first child ( temp highp int)
+0:116          'coord' ( temp highp int)
+0:116          'index' ( in highp int)
+0:117      Sequence
+0:117        move second child to first child ( temp highp 4-component vector of float)
+0:117          'samp' ( temp highp 4-component vector of float)
+0:117          textureFetch ( global highp 4-component vector of float)
+0:117            'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer)
+0:117            'coord' ( temp highp int)
+0:118      move second child to first child ( temp highp float)
+0:118        direct index ( temp highp float)
+0:118          'v' ( temp highp 3-component vector of float)
+0:118          Constant:
+0:118            0 (const int)
+0:118        direct index ( temp highp float)
+0:118          't' ( in highp 3-component vector of float)
+0:118          Constant:
+0:118            0 (const int)
+0:119      move second child to first child ( temp highp float)
+0:119        direct index ( temp highp float)
+0:119          'v' ( temp highp 3-component vector of float)
+0:119          Constant:
+0:119            1 (const int)
+0:119        direct index ( temp highp float)
+0:119          't' ( in highp 3-component vector of float)
+0:119          Constant:
+0:119            1 (const int)
+0:120      move second child to first child ( temp highp float)
+0:120        direct index ( temp highp float)
+0:120          'v' ( temp highp 3-component vector of float)
+0:120          Constant:
+0:120            2 (const int)
+0:120        direct index ( temp highp float)
+0:120          'samp' ( temp highp 4-component vector of float)
+0:120          Constant:
+0:120            0 (const int)
+0:121      move second child to first child ( temp highp 3-component vector of float)
+0:121        vector swizzle ( temp highp 3-component vector of float)
+0:121          't' ( in highp 3-component vector of float)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:121        vector swizzle ( temp highp 3-component vector of float)
+0:121          'v' ( temp highp 3-component vector of float)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:122      Branch: Return with expression
+0:122        't' ( in highp 3-component vector of float)
+0:124  Function Definition: TDInstanceActive(i1; ( global bool)
+0:124    Function Parameters: 
+0:124      'index' ( in highp int)
+0:125    Sequence
+0:125      subtract second child into first child ( temp highp int)
+0:125        'index' ( in highp int)
+0:125        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:125          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:125          Constant:
+0:125            0 (const uint)
+0:127      Sequence
+0:127        move second child to first child ( temp highp int)
+0:127          'coord' ( temp highp int)
+0:127          'index' ( in highp int)
+0:128      Sequence
+0:128        move second child to first child ( temp highp 4-component vector of float)
+0:128          'samp' ( temp highp 4-component vector of float)
+0:128          textureFetch ( global highp 4-component vector of float)
+0:128            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:128            'coord' ( temp highp int)
+0:129      move second child to first child ( temp highp float)
+0:129        'v' ( temp highp float)
+0:129        direct index ( temp highp float)
+0:129          'samp' ( temp highp 4-component vector of float)
+0:129          Constant:
+0:129            0 (const int)
+0:130      Branch: Return with expression
+0:130        Compare Not Equal ( temp bool)
+0:130          'v' ( temp highp float)
+0:130          Constant:
+0:130            0.000000
+0:132  Function Definition: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float)
+0:132    Function Parameters: 
+0:132      'index' ( in highp int)
+0:132      'instanceActive' ( out bool)
+0:133    Sequence
+0:133      Sequence
+0:133        move second child to first child ( temp highp int)
+0:133          'origIndex' ( temp highp int)
+0:133          'index' ( in highp int)
+0:134      subtract second child into first child ( temp highp int)
+0:134        'index' ( in highp int)
+0:134        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:134          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:134          Constant:
+0:134            0 (const uint)
+0:136      Sequence
+0:136        move second child to first child ( temp highp int)
+0:136          'coord' ( temp highp int)
+0:136          'index' ( in highp int)
+0:137      Sequence
+0:137        move second child to first child ( temp highp 4-component vector of float)
+0:137          'samp' ( temp highp 4-component vector of float)
+0:137          textureFetch ( global highp 4-component vector of float)
+0:137            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:137            'coord' ( temp highp int)
+0:138      move second child to first child ( temp highp float)
+0:138        direct index ( temp highp float)
+0:138          'v' ( temp highp 3-component vector of float)
+0:138          Constant:
+0:138            0 (const int)
+0:138        direct index ( temp highp float)
+0:138          'samp' ( temp highp 4-component vector of float)
+0:138          Constant:
+0:138            1 (const int)
+0:139      move second child to first child ( temp highp float)
+0:139        direct index ( temp highp float)
+0:139          'v' ( temp highp 3-component vector of float)
+0:139          Constant:
+0:139            1 (const int)
+0:139        direct index ( temp highp float)
+0:139          'samp' ( temp highp 4-component vector of float)
+0:139          Constant:
+0:139            2 (const int)
+0:140      move second child to first child ( temp highp float)
+0:140        direct index ( temp highp float)
+0:140          'v' ( temp highp 3-component vector of float)
+0:140          Constant:
+0:140            2 (const int)
+0:140        direct index ( temp highp float)
+0:140          'samp' ( temp highp 4-component vector of float)
+0:140          Constant:
+0:140            3 (const int)
+0:141      move second child to first child ( temp bool)
+0:141        'instanceActive' ( out bool)
+0:141        Compare Not Equal ( temp bool)
+0:141          direct index ( temp highp float)
+0:141            'samp' ( temp highp 4-component vector of float)
+0:141            Constant:
+0:141              0 (const int)
+0:141          Constant:
+0:141            0.000000
+0:142      Branch: Return with expression
+0:142        'v' ( temp highp 3-component vector of float)
+0:144  Function Definition: TDInstanceTranslate(i1; ( global highp 3-component vector of float)
+0:144    Function Parameters: 
+0:144      'index' ( in highp int)
+0:145    Sequence
+0:145      subtract second child into first child ( temp highp int)
+0:145        'index' ( in highp int)
+0:145        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:145          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:145          Constant:
+0:145            0 (const uint)
+0:147      Sequence
+0:147        move second child to first child ( temp highp int)
+0:147          'coord' ( temp highp int)
+0:147          'index' ( in highp int)
+0:148      Sequence
+0:148        move second child to first child ( temp highp 4-component vector of float)
+0:148          'samp' ( temp highp 4-component vector of float)
+0:148          textureFetch ( global highp 4-component vector of float)
+0:148            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:148            'coord' ( temp highp int)
+0:149      move second child to first child ( temp highp float)
+0:149        direct index ( temp highp float)
+0:149          'v' ( temp highp 3-component vector of float)
+0:149          Constant:
+0:149            0 (const int)
+0:149        direct index ( temp highp float)
+0:149          'samp' ( temp highp 4-component vector of float)
+0:149          Constant:
+0:149            1 (const int)
+0:150      move second child to first child ( temp highp float)
+0:150        direct index ( temp highp float)
+0:150          'v' ( temp highp 3-component vector of float)
+0:150          Constant:
+0:150            1 (const int)
+0:150        direct index ( temp highp float)
+0:150          'samp' ( temp highp 4-component vector of float)
+0:150          Constant:
+0:150            2 (const int)
+0:151      move second child to first child ( temp highp float)
+0:151        direct index ( temp highp float)
+0:151          'v' ( temp highp 3-component vector of float)
+0:151          Constant:
+0:151            2 (const int)
+0:151        direct index ( temp highp float)
+0:151          'samp' ( temp highp 4-component vector of float)
+0:151          Constant:
+0:151            3 (const int)
+0:152      Branch: Return with expression
+0:152        'v' ( temp highp 3-component vector of float)
+0:154  Function Definition: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float)
+0:154    Function Parameters: 
+0:154      'index' ( in highp int)
+0:155    Sequence
+0:155      subtract second child into first child ( temp highp int)
+0:155        'index' ( in highp int)
+0:155        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:155          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:155          Constant:
+0:155            0 (const uint)
+0:156      Sequence
+0:156        move second child to first child ( temp highp 3-component vector of float)
+0:156          'v' ( temp highp 3-component vector of float)
+0:156          Constant:
+0:156            0.000000
+0:156            0.000000
+0:156            0.000000
+0:157      Sequence
+0:157        move second child to first child ( temp highp 3X3 matrix of float)
+0:157          'm' ( temp highp 3X3 matrix of float)
+0:157          Constant:
+0:157            1.000000
+0:157            0.000000
+0:157            0.000000
+0:157            0.000000
+0:157            1.000000
+0:157            0.000000
+0:157            0.000000
+0:157            0.000000
+0:157            1.000000
+0:161      Branch: Return with expression
+0:161        'm' ( temp highp 3X3 matrix of float)
+0:163  Function Definition: TDInstanceScale(i1; ( global highp 3-component vector of float)
+0:163    Function Parameters: 
+0:163      'index' ( in highp int)
+0:164    Sequence
+0:164      subtract second child into first child ( temp highp int)
+0:164        'index' ( in highp int)
+0:164        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:164          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:164          Constant:
+0:164            0 (const uint)
+0:165      Sequence
+0:165        move second child to first child ( temp highp 3-component vector of float)
+0:165          'v' ( temp highp 3-component vector of float)
+0:165          Constant:
+0:165            1.000000
+0:165            1.000000
+0:165            1.000000
+0:166      Branch: Return with expression
+0:166        'v' ( temp highp 3-component vector of float)
+0:168  Function Definition: TDInstancePivot(i1; ( global highp 3-component vector of float)
+0:168    Function Parameters: 
+0:168      'index' ( in highp int)
+0:169    Sequence
+0:169      subtract second child into first child ( temp highp int)
+0:169        'index' ( in highp int)
+0:169        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:169          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:169          Constant:
+0:169            0 (const uint)
+0:170      Sequence
+0:170        move second child to first child ( temp highp 3-component vector of float)
+0:170          'v' ( temp highp 3-component vector of float)
+0:170          Constant:
+0:170            0.000000
+0:170            0.000000
+0:170            0.000000
+0:171      Branch: Return with expression
+0:171        'v' ( temp highp 3-component vector of float)
+0:173  Function Definition: TDInstanceRotTo(i1; ( global highp 3-component vector of float)
+0:173    Function Parameters: 
+0:173      'index' ( in highp int)
+0:174    Sequence
+0:174      subtract second child into first child ( temp highp int)
+0:174        'index' ( in highp int)
+0:174        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:174          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:174          Constant:
+0:174            0 (const uint)
+0:175      Sequence
+0:175        move second child to first child ( temp highp 3-component vector of float)
+0:175          'v' ( temp highp 3-component vector of float)
+0:175          Constant:
+0:175            0.000000
+0:175            0.000000
+0:175            1.000000
+0:176      Branch: Return with expression
+0:176        'v' ( temp highp 3-component vector of float)
+0:178  Function Definition: TDInstanceRotUp(i1; ( global highp 3-component vector of float)
+0:178    Function Parameters: 
+0:178      'index' ( in highp int)
+0:179    Sequence
+0:179      subtract second child into first child ( temp highp int)
+0:179        'index' ( in highp int)
+0:179        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:179          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:179          Constant:
+0:179            0 (const uint)
+0:180      Sequence
+0:180        move second child to first child ( temp highp 3-component vector of float)
+0:180          'v' ( temp highp 3-component vector of float)
+0:180          Constant:
+0:180            0.000000
+0:180            1.000000
+0:180            0.000000
+0:181      Branch: Return with expression
+0:181        'v' ( temp highp 3-component vector of float)
+0:183  Function Definition: TDInstanceMat(i1; ( global highp 4X4 matrix of float)
+0:183    Function Parameters: 
+0:183      'id' ( in highp int)
+0:184    Sequence
+0:184      Sequence
+0:184        move second child to first child ( temp bool)
+0:184          'instanceActive' ( temp bool)
+0:184          Constant:
+0:184            true (const bool)
+0:185      Sequence
+0:185        move second child to first child ( temp highp 3-component vector of float)
+0:185          't' ( temp highp 3-component vector of float)
+0:185          Function Call: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float)
+0:185            'id' ( in highp int)
+0:185            'instanceActive' ( temp bool)
+0:186      Test condition and select ( temp void)
+0:186        Condition
+0:186        Negate conditional ( temp bool)
+0:186          'instanceActive' ( temp bool)
+0:186        true case
+0:188        Sequence
+0:188          Branch: Return with expression
+0:188            Constant:
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:188              0.000000
+0:190      Sequence
+0:190        move second child to first child ( temp highp 4X4 matrix of float)
+0:190          'm' ( temp highp 4X4 matrix of float)
+0:190          Constant:
+0:190            1.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            1.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            1.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            0.000000
+0:190            1.000000
+0:192      Sequence
+0:192        Sequence
+0:192          move second child to first child ( temp highp 3-component vector of float)
+0:192            'tt' ( temp highp 3-component vector of float)
+0:192            't' ( temp highp 3-component vector of float)
+0:193        add second child into first child ( temp highp float)
+0:193          direct index ( temp highp float)
+0:193            direct index ( temp highp 4-component vector of float)
+0:193              'm' ( temp highp 4X4 matrix of float)
+0:193              Constant:
+0:193                3 (const int)
+0:193            Constant:
+0:193              0 (const int)
+0:193          component-wise multiply ( temp highp float)
+0:193            direct index ( temp highp float)
+0:193              direct index ( temp highp 4-component vector of float)
+0:193                'm' ( temp highp 4X4 matrix of float)
+0:193                Constant:
+0:193                  0 (const int)
+0:193              Constant:
+0:193                0 (const int)
+0:193            direct index ( temp highp float)
+0:193              'tt' ( temp highp 3-component vector of float)
+0:193              Constant:
+0:193                0 (const int)
+0:194        add second child into first child ( temp highp float)
+0:194          direct index ( temp highp float)
+0:194            direct index ( temp highp 4-component vector of float)
+0:194              'm' ( temp highp 4X4 matrix of float)
+0:194              Constant:
+0:194                3 (const int)
+0:194            Constant:
+0:194              1 (const int)
+0:194          component-wise multiply ( temp highp float)
+0:194            direct index ( temp highp float)
+0:194              direct index ( temp highp 4-component vector of float)
+0:194                'm' ( temp highp 4X4 matrix of float)
+0:194                Constant:
+0:194                  0 (const int)
+0:194              Constant:
+0:194                1 (const int)
+0:194            direct index ( temp highp float)
+0:194              'tt' ( temp highp 3-component vector of float)
+0:194              Constant:
+0:194                0 (const int)
+0:195        add second child into first child ( temp highp float)
+0:195          direct index ( temp highp float)
+0:195            direct index ( temp highp 4-component vector of float)
+0:195              'm' ( temp highp 4X4 matrix of float)
+0:195              Constant:
+0:195                3 (const int)
+0:195            Constant:
+0:195              2 (const int)
+0:195          component-wise multiply ( temp highp float)
+0:195            direct index ( temp highp float)
+0:195              direct index ( temp highp 4-component vector of float)
+0:195                'm' ( temp highp 4X4 matrix of float)
+0:195                Constant:
+0:195                  0 (const int)
+0:195              Constant:
+0:195                2 (const int)
+0:195            direct index ( temp highp float)
+0:195              'tt' ( temp highp 3-component vector of float)
+0:195              Constant:
+0:195                0 (const int)
+0:196        add second child into first child ( temp highp float)
+0:196          direct index ( temp highp float)
+0:196            direct index ( temp highp 4-component vector of float)
+0:196              'm' ( temp highp 4X4 matrix of float)
+0:196              Constant:
+0:196                3 (const int)
+0:196            Constant:
+0:196              3 (const int)
+0:196          component-wise multiply ( temp highp float)
+0:196            direct index ( temp highp float)
+0:196              direct index ( temp highp 4-component vector of float)
+0:196                'm' ( temp highp 4X4 matrix of float)
+0:196                Constant:
+0:196                  0 (const int)
+0:196              Constant:
+0:196                3 (const int)
+0:196            direct index ( temp highp float)
+0:196              'tt' ( temp highp 3-component vector of float)
+0:196              Constant:
+0:196                0 (const int)
+0:197        add second child into first child ( temp highp float)
+0:197          direct index ( temp highp float)
+0:197            direct index ( temp highp 4-component vector of float)
+0:197              'm' ( temp highp 4X4 matrix of float)
+0:197              Constant:
+0:197                3 (const int)
+0:197            Constant:
+0:197              0 (const int)
+0:197          component-wise multiply ( temp highp float)
+0:197            direct index ( temp highp float)
+0:197              direct index ( temp highp 4-component vector of float)
+0:197                'm' ( temp highp 4X4 matrix of float)
+0:197                Constant:
+0:197                  1 (const int)
+0:197              Constant:
+0:197                0 (const int)
+0:197            direct index ( temp highp float)
+0:197              'tt' ( temp highp 3-component vector of float)
+0:197              Constant:
+0:197                1 (const int)
+0:198        add second child into first child ( temp highp float)
+0:198          direct index ( temp highp float)
+0:198            direct index ( temp highp 4-component vector of float)
+0:198              'm' ( temp highp 4X4 matrix of float)
+0:198              Constant:
+0:198                3 (const int)
+0:198            Constant:
+0:198              1 (const int)
+0:198          component-wise multiply ( temp highp float)
+0:198            direct index ( temp highp float)
+0:198              direct index ( temp highp 4-component vector of float)
+0:198                'm' ( temp highp 4X4 matrix of float)
+0:198                Constant:
+0:198                  1 (const int)
+0:198              Constant:
+0:198                1 (const int)
+0:198            direct index ( temp highp float)
+0:198              'tt' ( temp highp 3-component vector of float)
+0:198              Constant:
+0:198                1 (const int)
+0:199        add second child into first child ( temp highp float)
+0:199          direct index ( temp highp float)
+0:199            direct index ( temp highp 4-component vector of float)
+0:199              'm' ( temp highp 4X4 matrix of float)
+0:199              Constant:
+0:199                3 (const int)
+0:199            Constant:
+0:199              2 (const int)
+0:199          component-wise multiply ( temp highp float)
+0:199            direct index ( temp highp float)
+0:199              direct index ( temp highp 4-component vector of float)
+0:199                'm' ( temp highp 4X4 matrix of float)
+0:199                Constant:
+0:199                  1 (const int)
+0:199              Constant:
+0:199                2 (const int)
+0:199            direct index ( temp highp float)
+0:199              'tt' ( temp highp 3-component vector of float)
+0:199              Constant:
+0:199                1 (const int)
+0:200        add second child into first child ( temp highp float)
+0:200          direct index ( temp highp float)
+0:200            direct index ( temp highp 4-component vector of float)
+0:200              'm' ( temp highp 4X4 matrix of float)
+0:200              Constant:
+0:200                3 (const int)
+0:200            Constant:
+0:200              3 (const int)
+0:200          component-wise multiply ( temp highp float)
+0:200            direct index ( temp highp float)
+0:200              direct index ( temp highp 4-component vector of float)
+0:200                'm' ( temp highp 4X4 matrix of float)
+0:200                Constant:
+0:200                  1 (const int)
+0:200              Constant:
+0:200                3 (const int)
+0:200            direct index ( temp highp float)
+0:200              'tt' ( temp highp 3-component vector of float)
+0:200              Constant:
+0:200                1 (const int)
+0:201        add second child into first child ( temp highp float)
+0:201          direct index ( temp highp float)
+0:201            direct index ( temp highp 4-component vector of float)
+0:201              'm' ( temp highp 4X4 matrix of float)
+0:201              Constant:
+0:201                3 (const int)
+0:201            Constant:
+0:201              0 (const int)
+0:201          component-wise multiply ( temp highp float)
+0:201            direct index ( temp highp float)
+0:201              direct index ( temp highp 4-component vector of float)
+0:201                'm' ( temp highp 4X4 matrix of float)
+0:201                Constant:
+0:201                  2 (const int)
+0:201              Constant:
+0:201                0 (const int)
+0:201            direct index ( temp highp float)
+0:201              'tt' ( temp highp 3-component vector of float)
+0:201              Constant:
+0:201                2 (const int)
+0:202        add second child into first child ( temp highp float)
+0:202          direct index ( temp highp float)
+0:202            direct index ( temp highp 4-component vector of float)
+0:202              'm' ( temp highp 4X4 matrix of float)
+0:202              Constant:
+0:202                3 (const int)
+0:202            Constant:
+0:202              1 (const int)
+0:202          component-wise multiply ( temp highp float)
+0:202            direct index ( temp highp float)
+0:202              direct index ( temp highp 4-component vector of float)
+0:202                'm' ( temp highp 4X4 matrix of float)
+0:202                Constant:
+0:202                  2 (const int)
+0:202              Constant:
+0:202                1 (const int)
+0:202            direct index ( temp highp float)
+0:202              'tt' ( temp highp 3-component vector of float)
+0:202              Constant:
+0:202                2 (const int)
+0:203        add second child into first child ( temp highp float)
+0:203          direct index ( temp highp float)
+0:203            direct index ( temp highp 4-component vector of float)
+0:203              'm' ( temp highp 4X4 matrix of float)
+0:203              Constant:
+0:203                3 (const int)
+0:203            Constant:
+0:203              2 (const int)
+0:203          component-wise multiply ( temp highp float)
+0:203            direct index ( temp highp float)
+0:203              direct index ( temp highp 4-component vector of float)
+0:203                'm' ( temp highp 4X4 matrix of float)
+0:203                Constant:
+0:203                  2 (const int)
+0:203              Constant:
+0:203                2 (const int)
+0:203            direct index ( temp highp float)
+0:203              'tt' ( temp highp 3-component vector of float)
+0:203              Constant:
+0:203                2 (const int)
+0:204        add second child into first child ( temp highp float)
+0:204          direct index ( temp highp float)
+0:204            direct index ( temp highp 4-component vector of float)
+0:204              'm' ( temp highp 4X4 matrix of float)
+0:204              Constant:
+0:204                3 (const int)
+0:204            Constant:
+0:204              3 (const int)
+0:204          component-wise multiply ( temp highp float)
+0:204            direct index ( temp highp float)
+0:204              direct index ( temp highp 4-component vector of float)
+0:204                'm' ( temp highp 4X4 matrix of float)
+0:204                Constant:
+0:204                  2 (const int)
+0:204              Constant:
+0:204                3 (const int)
+0:204            direct index ( temp highp float)
+0:204              'tt' ( temp highp 3-component vector of float)
+0:204              Constant:
+0:204                2 (const int)
+0:206      Branch: Return with expression
+0:206        'm' ( temp highp 4X4 matrix of float)
+0:208  Function Definition: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:208    Function Parameters: 
+0:208      'id' ( in highp int)
+0:209    Sequence
+0:209      Sequence
+0:209        move second child to first child ( temp highp 3X3 matrix of float)
+0:209          'm' ( temp highp 3X3 matrix of float)
+0:209          Constant:
+0:209            1.000000
+0:209            0.000000
+0:209            0.000000
+0:209            0.000000
+0:209            1.000000
+0:209            0.000000
+0:209            0.000000
+0:209            0.000000
+0:209            1.000000
+0:210      Branch: Return with expression
+0:210        'm' ( temp highp 3X3 matrix of float)
+0:212  Function Definition: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float)
+0:212    Function Parameters: 
+0:212      'id' ( in highp int)
+0:213    Sequence
+0:213      Sequence
+0:213        move second child to first child ( temp highp 3X3 matrix of float)
+0:213          'm' ( temp highp 3X3 matrix of float)
+0:213          Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:213            'id' ( in highp int)
+0:214      Branch: Return with expression
+0:214        'm' ( temp highp 3X3 matrix of float)
+0:216  Function Definition: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float)
+0:216    Function Parameters: 
+0:216      'index' ( in highp int)
+0:216      'curColor' ( in highp 4-component vector of float)
+0:217    Sequence
+0:217      subtract second child into first child ( temp highp int)
+0:217        'index' ( in highp int)
+0:217        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:217          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:217          Constant:
+0:217            0 (const uint)
+0:219      Sequence
+0:219        move second child to first child ( temp highp int)
+0:219          'coord' ( temp highp int)
+0:219          'index' ( in highp int)
+0:220      Sequence
+0:220        move second child to first child ( temp highp 4-component vector of float)
+0:220          'samp' ( temp highp 4-component vector of float)
+0:220          textureFetch ( global highp 4-component vector of float)
+0:220            'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer)
+0:220            'coord' ( temp highp int)
+0:221      move second child to first child ( temp highp float)
+0:221        direct index ( temp highp float)
+0:221          'v' ( temp highp 4-component vector of float)
+0:221          Constant:
+0:221            0 (const int)
+0:221        direct index ( temp highp float)
+0:221          'samp' ( temp highp 4-component vector of float)
+0:221          Constant:
+0:221            0 (const int)
+0:222      move second child to first child ( temp highp float)
+0:222        direct index ( temp highp float)
+0:222          'v' ( temp highp 4-component vector of float)
+0:222          Constant:
+0:222            1 (const int)
+0:222        direct index ( temp highp float)
+0:222          'samp' ( temp highp 4-component vector of float)
+0:222          Constant:
+0:222            1 (const int)
+0:223      move second child to first child ( temp highp float)
+0:223        direct index ( temp highp float)
+0:223          'v' ( temp highp 4-component vector of float)
+0:223          Constant:
+0:223            2 (const int)
+0:223        direct index ( temp highp float)
+0:223          'samp' ( temp highp 4-component vector of float)
+0:223          Constant:
+0:223            2 (const int)
+0:224      move second child to first child ( temp highp float)
+0:224        direct index ( temp highp float)
+0:224          'v' ( temp highp 4-component vector of float)
+0:224          Constant:
+0:224            3 (const int)
+0:224        Constant:
+0:224          1.000000
+0:225      move second child to first child ( temp highp float)
+0:225        direct index ( temp highp float)
+0:225          'curColor' ( in highp 4-component vector of float)
+0:225          Constant:
+0:225            0 (const int)
+0:225        direct index ( temp highp float)
+0:225          'v' ( temp highp 4-component vector of float)
+0:225          Constant:
+0:225            0 (const int)
+0:227      move second child to first child ( temp highp float)
+0:227        direct index ( temp highp float)
+0:227          'curColor' ( in highp 4-component vector of float)
+0:227          Constant:
+0:227            1 (const int)
+0:227        direct index ( temp highp float)
+0:227          'v' ( temp highp 4-component vector of float)
+0:227          Constant:
+0:227            1 (const int)
+0:229      move second child to first child ( temp highp float)
+0:229        direct index ( temp highp float)
+0:229          'curColor' ( in highp 4-component vector of float)
+0:229          Constant:
+0:229            2 (const int)
+0:229        direct index ( temp highp float)
+0:229          'v' ( temp highp 4-component vector of float)
+0:229          Constant:
+0:229            2 (const int)
+0:231      Branch: Return with expression
+0:231        'curColor' ( in highp 4-component vector of float)
+0:233  Function Definition: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float)
+0:233    Function Parameters: 
+0:233      'id' ( in highp int)
+0:233      'pos' ( in highp 4-component vector of float)
+0:234    Sequence
+0:234      move second child to first child ( temp highp 4-component vector of float)
+0:234        'pos' ( in highp 4-component vector of float)
+0:234        matrix-times-vector ( temp highp 4-component vector of float)
+0:234          Function Call: TDInstanceMat(i1; ( global highp 4X4 matrix of float)
+0:234            'id' ( in highp int)
+0:234          'pos' ( in highp 4-component vector of float)
+0:235      Branch: Return with expression
+0:235        matrix-times-vector ( temp highp 4-component vector of float)
+0:235          world: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float)
+0:235            indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:235              uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:235                'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:235                Constant:
+0:235                  0 (const uint)
+0:235              Function Call: TDCameraIndex( ( global highp int)
+0:235            Constant:
+0:235              0 (const int)
+0:235          'pos' ( in highp 4-component vector of float)
+0:238  Function Definition: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:238    Function Parameters: 
+0:238      'id' ( in highp int)
+0:238      'vec' ( in highp 3-component vector of float)
+0:240    Sequence
+0:240      Sequence
+0:240        move second child to first child ( temp highp 3X3 matrix of float)
+0:240          'm' ( temp highp 3X3 matrix of float)
+0:240          Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:240            'id' ( in highp int)
+0:241      Branch: Return with expression
+0:241        matrix-times-vector ( temp highp 3-component vector of float)
+0:241          Construct mat3 ( temp highp 3X3 matrix of float)
+0:241            world: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float)
+0:241              indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:241                uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:241                  'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:241                  Constant:
+0:241                    0 (const uint)
+0:241                Function Call: TDCameraIndex( ( global highp int)
+0:241              Constant:
+0:241                0 (const int)
+0:241          matrix-times-vector ( temp highp 3-component vector of float)
+0:241            'm' ( temp highp 3X3 matrix of float)
+0:241            'vec' ( in highp 3-component vector of float)
+0:243  Function Definition: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:243    Function Parameters: 
+0:243      'id' ( in highp int)
+0:243      'vec' ( in highp 3-component vector of float)
+0:245    Sequence
+0:245      Sequence
+0:245        move second child to first child ( temp highp 3X3 matrix of float)
+0:245          'm' ( temp highp 3X3 matrix of float)
+0:245          Function Call: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float)
+0:245            'id' ( in highp int)
+0:246      Branch: Return with expression
+0:246        matrix-times-vector ( temp highp 3-component vector of float)
+0:246          Construct mat3 ( temp highp 3X3 matrix of float)
+0:246            worldForNormals: direct index for structure (layout( column_major std140) global highp 3X3 matrix of float)
+0:246              indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:246                uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals})
+0:246                  'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:246                  Constant:
+0:246                    0 (const uint)
+0:246                Function Call: TDCameraIndex( ( global highp int)
+0:246              Constant:
+0:246                13 (const int)
+0:246          matrix-times-vector ( temp highp 3-component vector of float)
+0:246            'm' ( temp highp 3X3 matrix of float)
+0:246            'vec' ( in highp 3-component vector of float)
+0:248  Function Definition: TDInstanceDeform(vf4; ( global highp 4-component vector of float)
+0:248    Function Parameters: 
+0:248      'pos' ( in highp 4-component vector of float)
+0:249    Sequence
+0:249      Branch: Return with expression
+0:249        Function Call: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float)
+0:249          Function Call: TDInstanceID( ( global highp int)
+0:249          'pos' ( in highp 4-component vector of float)
+0:251  Function Definition: TDInstanceDeformVec(vf3; ( global highp 3-component vector of float)
+0:251    Function Parameters: 
+0:251      'vec' ( in highp 3-component vector of float)
+0:252    Sequence
+0:252      Branch: Return with expression
+0:252        Function Call: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:252          Function Call: TDInstanceID( ( global highp int)
+0:252          'vec' ( in highp 3-component vector of float)
+0:254  Function Definition: TDInstanceDeformNorm(vf3; ( global highp 3-component vector of float)
+0:254    Function Parameters: 
+0:254      'vec' ( in highp 3-component vector of float)
+0:255    Sequence
+0:255      Branch: Return with expression
+0:255        Function Call: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:255          Function Call: TDInstanceID( ( global highp int)
+0:255          'vec' ( in highp 3-component vector of float)
+0:257  Function Definition: TDInstanceActive( ( global bool)
+0:257    Function Parameters: 
+0:257    Sequence
+0:257      Branch: Return with expression
+0:257        Function Call: TDInstanceActive(i1; ( global bool)
+0:257          Function Call: TDInstanceID( ( global highp int)
+0:258  Function Definition: TDInstanceTranslate( ( global highp 3-component vector of float)
+0:258    Function Parameters: 
+0:258    Sequence
+0:258      Branch: Return with expression
+0:258        Function Call: TDInstanceTranslate(i1; ( global highp 3-component vector of float)
+0:258          Function Call: TDInstanceID( ( global highp int)
+0:259  Function Definition: TDInstanceRotateMat( ( global highp 3X3 matrix of float)
+0:259    Function Parameters: 
+0:259    Sequence
+0:259      Branch: Return with expression
+0:259        Function Call: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float)
+0:259          Function Call: TDInstanceID( ( global highp int)
+0:260  Function Definition: TDInstanceScale( ( global highp 3-component vector of float)
+0:260    Function Parameters: 
+0:260    Sequence
+0:260      Branch: Return with expression
+0:260        Function Call: TDInstanceScale(i1; ( global highp 3-component vector of float)
+0:260          Function Call: TDInstanceID( ( global highp int)
+0:261  Function Definition: TDInstanceMat( ( global highp 4X4 matrix of float)
+0:261    Function Parameters: 
+0:261    Sequence
+0:261      Branch: Return with expression
+0:261        Function Call: TDInstanceMat(i1; ( global highp 4X4 matrix of float)
+0:261          Function Call: TDInstanceID( ( global highp int)
+0:263  Function Definition: TDInstanceMat3( ( global highp 3X3 matrix of float)
+0:263    Function Parameters: 
+0:263    Sequence
+0:263      Branch: Return with expression
+0:263        Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:263          Function Call: TDInstanceID( ( global highp int)
+0:265  Function Definition: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float)
+0:265    Function Parameters: 
+0:265      't' ( in highp 3-component vector of float)
+0:266    Sequence
+0:266      Branch: Return with expression
+0:266        Function Call: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float)
+0:266          Function Call: TDInstanceID( ( global highp int)
+0:266          't' ( in highp 3-component vector of float)
+0:268  Function Definition: TDInstanceColor(vf4; ( global highp 4-component vector of float)
+0:268    Function Parameters: 
+0:268      'curColor' ( in highp 4-component vector of float)
+0:269    Sequence
+0:269      Branch: Return with expression
+0:269        Function Call: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float)
+0:269          Function Call: TDInstanceID( ( global highp int)
+0:269          'curColor' ( in highp 4-component vector of float)
+0:271  Function Definition: TDSkinnedDeform(vf4; ( global highp 4-component vector of float)
+0:271    Function Parameters: 
+0:271      'pos' ( in highp 4-component vector of float)
+0:271    Sequence
+0:271      Branch: Return with expression
+0:271        'pos' ( in highp 4-component vector of float)
+0:273  Function Definition: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float)
+0:273    Function Parameters: 
+0:273      'vec' ( in highp 3-component vector of float)
+0:273    Sequence
+0:273      Branch: Return with expression
+0:273        'vec' ( in highp 3-component vector of float)
+0:275  Function Definition: TDFastDeformTangent(vf3;vf4;vf3; ( global highp 3-component vector of float)
+0:275    Function Parameters: 
+0:275      'oldNorm' ( in highp 3-component vector of float)
+0:275      'oldTangent' ( in highp 4-component vector of float)
+0:275      'deformedNorm' ( in highp 3-component vector of float)
+0:276    Sequence
+0:276      Branch: Return with expression
+0:276        vector swizzle ( temp highp 3-component vector of float)
+0:276          'oldTangent' ( in highp 4-component vector of float)
+0:276          Sequence
+0:276            Constant:
+0:276              0 (const int)
+0:276            Constant:
+0:276              1 (const int)
+0:276            Constant:
+0:276              2 (const int)
+0:277  Function Definition: TDBoneMat(i1; ( global highp 4X4 matrix of float)
+0:277    Function Parameters: 
+0:277      'index' ( in highp int)
+0:278    Sequence
+0:278      Branch: Return with expression
+0:278        Constant:
+0:278          1.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          1.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          1.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          0.000000
+0:278          1.000000
+0:280  Function Definition: TDDeform(vf4; ( global highp 4-component vector of float)
+0:280    Function Parameters: 
+0:280      'pos' ( in highp 4-component vector of float)
+0:281    Sequence
+0:281      move second child to first child ( temp highp 4-component vector of float)
+0:281        'pos' ( in highp 4-component vector of float)
+0:281        Function Call: TDSkinnedDeform(vf4; ( global highp 4-component vector of float)
+0:281          'pos' ( in highp 4-component vector of float)
+0:282      move second child to first child ( temp highp 4-component vector of float)
+0:282        'pos' ( in highp 4-component vector of float)
+0:282        Function Call: TDInstanceDeform(vf4; ( global highp 4-component vector of float)
+0:282          'pos' ( in highp 4-component vector of float)
+0:283      Branch: Return with expression
+0:283        'pos' ( in highp 4-component vector of float)
+0:286  Function Definition: TDDeform(i1;vf3; ( global highp 4-component vector of float)
+0:286    Function Parameters: 
+0:286      'instanceID' ( in highp int)
+0:286      'p' ( in highp 3-component vector of float)
+0:287    Sequence
+0:287      Sequence
+0:287        move second child to first child ( temp highp 4-component vector of float)
+0:287          'pos' ( temp highp 4-component vector of float)
+0:287          Construct vec4 ( temp highp 4-component vector of float)
+0:287            'p' ( in highp 3-component vector of float)
+0:287            Constant:
+0:287              1.000000
+0:288      move second child to first child ( temp highp 4-component vector of float)
+0:288        'pos' ( temp highp 4-component vector of float)
+0:288        Function Call: TDSkinnedDeform(vf4; ( global highp 4-component vector of float)
+0:288          'pos' ( temp highp 4-component vector of float)
+0:289      move second child to first child ( temp highp 4-component vector of float)
+0:289        'pos' ( temp highp 4-component vector of float)
+0:289        Function Call: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float)
+0:289          'instanceID' ( in highp int)
+0:289          'pos' ( temp highp 4-component vector of float)
+0:290      Branch: Return with expression
+0:290        'pos' ( temp highp 4-component vector of float)
+0:293  Function Definition: TDDeform(vf3; ( global highp 4-component vector of float)
+0:293    Function Parameters: 
+0:293      'pos' ( in highp 3-component vector of float)
+0:294    Sequence
+0:294      Branch: Return with expression
+0:294        Function Call: TDDeform(i1;vf3; ( global highp 4-component vector of float)
+0:294          Function Call: TDInstanceID( ( global highp int)
+0:294          'pos' ( in highp 3-component vector of float)
+0:297  Function Definition: TDDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:297    Function Parameters: 
+0:297      'instanceID' ( in highp int)
+0:297      'vec' ( in highp 3-component vector of float)
+0:298    Sequence
+0:298      move second child to first child ( temp highp 3-component vector of float)
+0:298        'vec' ( in highp 3-component vector of float)
+0:298        Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float)
+0:298          'vec' ( in highp 3-component vector of float)
+0:299      move second child to first child ( temp highp 3-component vector of float)
+0:299        'vec' ( in highp 3-component vector of float)
+0:299        Function Call: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:299          'instanceID' ( in highp int)
+0:299          'vec' ( in highp 3-component vector of float)
+0:300      Branch: Return with expression
+0:300        'vec' ( in highp 3-component vector of float)
+0:303  Function Definition: TDDeformVec(vf3; ( global highp 3-component vector of float)
+0:303    Function Parameters: 
+0:303      'vec' ( in highp 3-component vector of float)
+0:304    Sequence
+0:304      Branch: Return with expression
+0:304        Function Call: TDDeformVec(i1;vf3; ( global highp 3-component vector of float)
+0:304          Function Call: TDInstanceID( ( global highp int)
+0:304          'vec' ( in highp 3-component vector of float)
+0:307  Function Definition: TDDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:307    Function Parameters: 
+0:307      'instanceID' ( in highp int)
+0:307      'vec' ( in highp 3-component vector of float)
+0:308    Sequence
+0:308      move second child to first child ( temp highp 3-component vector of float)
+0:308        'vec' ( in highp 3-component vector of float)
+0:308        Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float)
+0:308          'vec' ( in highp 3-component vector of float)
+0:309      move second child to first child ( temp highp 3-component vector of float)
+0:309        'vec' ( in highp 3-component vector of float)
+0:309        Function Call: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:309          'instanceID' ( in highp int)
+0:309          'vec' ( in highp 3-component vector of float)
+0:310      Branch: Return with expression
+0:310        'vec' ( in highp 3-component vector of float)
+0:313  Function Definition: TDDeformNorm(vf3; ( global highp 3-component vector of float)
+0:313    Function Parameters: 
+0:313      'vec' ( in highp 3-component vector of float)
+0:314    Sequence
+0:314      Branch: Return with expression
+0:314        Function Call: TDDeformNorm(i1;vf3; ( global highp 3-component vector of float)
+0:314          Function Call: TDInstanceID( ( global highp int)
+0:314          'vec' ( in highp 3-component vector of float)
+0:317  Function Definition: TDSkinnedDeformNorm(vf3; ( global highp 3-component vector of float)
+0:317    Function Parameters: 
+0:317      'vec' ( in highp 3-component vector of float)
+0:318    Sequence
+0:318      move second child to first child ( temp highp 3-component vector of float)
+0:318        'vec' ( in highp 3-component vector of float)
+0:318        Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float)
+0:318          'vec' ( in highp 3-component vector of float)
+0:319      Branch: Return with expression
+0:319        'vec' ( in highp 3-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor,  global highp int renderTOPCameraIndex} uTDCamInfos})
+0:?     'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float viewport,  global highp 4-component vector of float viewportRes,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor} uTDGeneral})
+0:?     'P' (layout( location=0) in highp 3-component vector of float)
+0:?     'N' (layout( location=1) in highp 3-component vector of float)
+0:?     'Cd' (layout( location=2) in highp 4-component vector of float)
+0:?     'uv' (layout( location=3) in 8-element array of highp 3-component vector of float)
+0:?     'oVert' ( out block{ out highp 4-component vector of float color,  out highp 3-component vector of float worldSpacePos,  out highp 3-component vector of float texCoord0,  flat out highp int cameraIndex,  flat out highp int instance})
+0:?     'anon@4' ( 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:?     'gl_VertexIndex' ( in int VertexIndex)
+0:?     'gl_InstanceIndex' ( in int InstanceIndex)
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position,  global highp 3-component vector of float direction,  global highp 3-component vector of float diffuse,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float lightSize,  global highp 4-component vector of float misc,  global highp 4-component vector of float coneLookupScaleBias,  global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix,  global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights})
+0:?     'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs})
+0:?     'mTD2DImageOutputs' (layout( rgba8) uniform 1-element array of highp image2D)
+0:?     'mTD2DArrayImageOutputs' (layout( rgba8) uniform 1-element array of highp image2DArray)
+0:?     'mTD3DImageOutputs' (layout( rgba8) uniform 1-element array of highp image3D)
+0:?     'mTDCubeImageOutputs' (layout( rgba8) uniform 1-element array of highp imageCube)
+0:?     'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:?     'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer)
+0:?     'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer)
+Shader version: 460
+gl_FragCoord origin is upper left
+0:? Sequence
+0:95  Function Definition: main( ( global void)
+0:95    Function Parameters: 
+0:99    Sequence
+0:99      Function Call: TDCheckDiscard( ( global void)
+0:101      Sequence
+0:101        move second child to first child ( temp highp 4-component vector of float)
+0:101          'outcol' ( temp highp 4-component vector of float)
+0:101          Constant:
+0:101            0.000000
+0:101            0.000000
+0:101            0.000000
+0:101            0.000000
+0:103      Sequence
+0:103        move second child to first child ( temp highp 3-component vector of float)
+0:103          'texCoord0' ( temp highp 3-component vector of float)
+0:103          vector swizzle ( temp highp 3-component vector of float)
+0:103            texCoord0: direct index for structure ( in highp 3-component vector of float)
+0:103              'iVert' ( in block{ in highp 4-component vector of float color,  in highp 3-component vector of float worldSpacePos,  in highp 3-component vector of float texCoord0,  flat in highp int cameraIndex,  flat in highp int instance})
+0:103              Constant:
+0:103                2 (const int)
+0:103            Sequence
+0:103              Constant:
+0:103                0 (const int)
+0:103              Constant:
+0:103                1 (const int)
+0:103              Constant:
+0:103                2 (const int)
+0:104      Sequence
+0:104        move second child to first child ( temp highp float)
+0:104          'actualTexZ' ( temp highp float)
+0:104          mod ( global highp float)
+0:104            Convert int to float ( temp highp float)
+0:104              Convert float to int ( temp highp int)
+0:104                direct index ( temp highp float)
+0:104                  'texCoord0' ( temp highp 3-component vector of float)
+0:104                  Constant:
+0:104                    2 (const int)
+0:104            Constant:
+0:104              2048.000000
+0:105      Sequence
+0:105        move second child to first child ( temp highp float)
+0:105          'instanceLoop' ( temp highp float)
+0:105          Floor ( global highp float)
+0:105            Convert int to float ( temp highp float)
+0:105              divide ( temp highp int)
+0:105                Convert float to int ( temp highp int)
+0:105                  direct index ( temp highp float)
+0:105                    'texCoord0' ( temp highp 3-component vector of float)
+0:105                    Constant:
+0:105                      2 (const int)
+0:105                Constant:
+0:105                  2048 (const int)
+0:106      move second child to first child ( temp highp float)
+0:106        direct index ( temp highp float)
+0:106          'texCoord0' ( temp highp 3-component vector of float)
+0:106          Constant:
+0:106            2 (const int)
+0:106        'actualTexZ' ( temp highp float)
+0:107      Sequence
+0:107        move second child to first child ( temp highp 4-component vector of float)
+0:107          'colorMapColor' ( temp highp 4-component vector of float)
+0:107          texture ( global highp 4-component vector of float)
+0:107            'sColorMap' ( uniform highp sampler2DArray)
+0:107            vector swizzle ( temp highp 3-component vector of float)
+0:107              'texCoord0' ( temp highp 3-component vector of float)
+0:107              Sequence
+0:107                Constant:
+0:107                  0 (const int)
+0:107                Constant:
+0:107                  1 (const int)
+0:107                Constant:
+0:107                  2 (const int)
+0:109      Sequence
+0:109        move second child to first child ( temp highp float)
+0:109          'red' ( temp highp float)
+0:109          indirect index ( temp highp float)
+0:109            'colorMapColor' ( temp highp 4-component vector of float)
+0:109            Convert float to int ( temp highp int)
+0:109              'instanceLoop' ( temp highp float)
+0:110      move second child to first child ( temp highp 4-component vector of float)
+0:110        'colorMapColor' ( temp highp 4-component vector of float)
+0:110        Construct vec4 ( temp highp 4-component vector of float)
+0:110          'red' ( temp highp float)
+0:112      add second child into first child ( temp highp 3-component vector of float)
+0:112        vector swizzle ( temp highp 3-component vector of float)
+0:112          'outcol' ( temp highp 4-component vector of float)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        component-wise multiply ( temp highp 3-component vector of float)
+0:112          uConstant: direct index for structure ( uniform highp 3-component vector of float)
+0:112            'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:112            Constant:
+0:112              3 (const uint)
+0:112          vector swizzle ( temp highp 3-component vector of float)
+0:112            color: direct index for structure ( in highp 4-component vector of float)
+0:112              'iVert' ( in block{ in highp 4-component vector of float color,  in highp 3-component vector of float worldSpacePos,  in highp 3-component vector of float texCoord0,  flat in highp int cameraIndex,  flat in highp int instance})
+0:112              Constant:
+0:112                0 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      multiply second child into first child ( temp highp 4-component vector of float)
+0:114        'outcol' ( temp highp 4-component vector of float)
+0:114        'colorMapColor' ( temp highp 4-component vector of float)
+0:117      Sequence
+0:117        move second child to first child ( temp highp float)
+0:117          'alpha' ( temp highp float)
+0:117          component-wise multiply ( temp highp float)
+0:117            direct index ( temp highp float)
+0:117              color: direct index for structure ( in highp 4-component vector of float)
+0:117                'iVert' ( in block{ in highp 4-component vector of float color,  in highp 3-component vector of float worldSpacePos,  in highp 3-component vector of float texCoord0,  flat in highp int cameraIndex,  flat in highp int instance})
+0:117                Constant:
+0:117                  0 (const int)
+0:117              Constant:
+0:117                3 (const int)
+0:117            direct index ( temp highp float)
+0:117              'colorMapColor' ( temp highp 4-component vector of float)
+0:117              Constant:
+0:117                3 (const int)
+0:120      move second child to first child ( temp highp 4-component vector of float)
+0:120        'outcol' ( temp highp 4-component vector of float)
+0:120        Function Call: TDDither(vf4; ( global highp 4-component vector of float)
+0:120          'outcol' ( temp highp 4-component vector of float)
+0:122      vector scale second child into first child ( temp highp 3-component vector of float)
+0:122        vector swizzle ( temp highp 3-component vector of float)
+0:122          'outcol' ( temp highp 4-component vector of float)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        'alpha' ( temp highp float)
+0:126      Function Call: TDAlphaTest(f1; ( global void)
+0:126        'alpha' ( temp highp float)
+0:128      move second child to first child ( temp highp float)
+0:128        direct index ( temp highp float)
+0:128          'outcol' ( temp highp 4-component vector of float)
+0:128          Constant:
+0:128            3 (const int)
+0:128        'alpha' ( temp highp float)
+0:129      move second child to first child ( temp highp 4-component vector of float)
+0:129        direct index (layout( location=0) temp highp 4-component vector of float)
+0:129          'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float)
+0:129          Constant:
+0:129            0 (const int)
+0:129        Function Call: TDOutputSwizzle(vf4; ( global highp 4-component vector of float)
+0:129          'outcol' ( temp highp 4-component vector of float)
+0:135      Sequence
+0:135        Sequence
+0:135          move second child to first child ( temp highp int)
+0:135            'i' ( temp highp int)
+0:135            Constant:
+0:135              1 (const int)
+0:135        Loop with condition tested first
+0:135          Loop Condition
+0:135          Compare Less Than ( temp bool)
+0:135            'i' ( temp highp int)
+0:135            Constant:
+0:135              1 (const int)
+0:135          Loop Body
+0:137          Sequence
+0:137            move second child to first child ( temp highp 4-component vector of float)
+0:137              indirect index (layout( location=0) temp highp 4-component vector of float)
+0:137                'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float)
+0:137                'i' ( temp highp int)
+0:137              Constant:
+0:137                0.000000
+0:137                0.000000
+0:137                0.000000
+0:137                0.000000
+0:135          Loop Terminal Expression
+0:135          Post-Increment ( temp highp int)
+0:135            'i' ( temp highp int)
+0:116  Function Definition: TDColor(vf4; ( global highp 4-component vector of float)
+0:116    Function Parameters: 
+0:116      'color' ( in highp 4-component vector of float)
+0:116    Sequence
+0:116      Branch: Return with expression
+0:116        'color' ( in highp 4-component vector of float)
+0:117  Function Definition: TDCheckOrderIndTrans( ( global void)
+0:117    Function Parameters: 
+0:119  Function Definition: TDCheckDiscard( ( global void)
+0:119    Function Parameters: 
+0:120    Sequence
+0:120      Function Call: TDCheckOrderIndTrans( ( global void)
+0:122  Function Definition: TDDither(vf4; ( global highp 4-component vector of float)
+0:122    Function Parameters: 
+0:122      'color' ( in highp 4-component vector of float)
+0:124    Sequence
+0:124      Sequence
+0:124        move second child to first child ( temp highp float)
+0:124          'd' ( temp highp float)
+0:125          direct index ( temp highp float)
+0:125            texture ( global highp 4-component vector of float)
+0:124              'sTDNoiseMap' ( uniform highp sampler2D)
+0:125              divide ( temp highp 2-component vector of float)
+0:125                vector swizzle ( temp highp 2-component vector of float)
+0:125                  'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:125                  Sequence
+0:125                    Constant:
+0:125                      0 (const int)
+0:125                    Constant:
+0:125                      1 (const int)
+0:125                Constant:
+0:125                  256.000000
+0:125            Constant:
+0:125              0 (const int)
+0:126      subtract second child into first child ( temp highp float)
+0:126        'd' ( temp highp float)
+0:126        Constant:
+0:126          0.500000
+0:127      divide second child into first child ( temp highp float)
+0:127        'd' ( temp highp float)
+0:127        Constant:
+0:127          256.000000
+0:128      Branch: Return with expression
+0:128        Construct vec4 ( temp highp 4-component vector of float)
+0:128          add ( temp highp 3-component vector of float)
+0:128            vector swizzle ( temp highp 3-component vector of float)
+0:128              'color' ( in highp 4-component vector of float)
+0:128              Sequence
+0:128                Constant:
+0:128                  0 (const int)
+0:128                Constant:
+0:128                  1 (const int)
+0:128                Constant:
+0:128                  2 (const int)
+0:128            'd' ( temp highp float)
+0:128          direct index ( temp highp float)
+0:128            'color' ( in highp 4-component vector of float)
+0:128            Constant:
+0:128              3 (const int)
+0:130  Function Definition: TDFrontFacing(vf3;vf3; ( global bool)
+0:130    Function Parameters: 
+0:130      'pos' ( in highp 3-component vector of float)
+0:130      'normal' ( in highp 3-component vector of float)
+0:132    Sequence
+0:132      Branch: Return with expression
+0:132        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:134  Function Definition: TDAttenuateLight(i1;f1; ( global highp float)
+0:134    Function Parameters: 
+0:134      'index' ( in highp int)
+0:134      'lightDist' ( in highp float)
+0:136    Sequence
+0:136      Branch: Return with expression
+0:136        Constant:
+0:136          1.000000
+0:138  Function Definition: TDAlphaTest(f1; ( global void)
+0:138    Function Parameters: 
+0:138      'alpha' ( in highp float)
+0:140  Function Definition: TDHardShadow(i1;vf3; ( global highp float)
+0:140    Function Parameters: 
+0:140      'lightIndex' ( in highp int)
+0:140      'worldSpacePos' ( in highp 3-component vector of float)
+0:141    Sequence
+0:141      Branch: Return with expression
+0:141        Constant:
+0:141          0.000000
+0:142  Function Definition: TDSoftShadow(i1;vf3;i1;i1; ( global highp float)
+0:142    Function Parameters: 
+0:142      'lightIndex' ( in highp int)
+0:142      'worldSpacePos' ( in highp 3-component vector of float)
+0:142      'samples' ( in highp int)
+0:142      'steps' ( in highp int)
+0:143    Sequence
+0:143      Branch: Return with expression
+0:143        Constant:
+0:143          0.000000
+0:144  Function Definition: TDSoftShadow(i1;vf3; ( global highp float)
+0:144    Function Parameters: 
+0:144      'lightIndex' ( in highp int)
+0:144      'worldSpacePos' ( in highp 3-component vector of float)
+0:145    Sequence
+0:145      Branch: Return with expression
+0:145        Constant:
+0:145          0.000000
+0:146  Function Definition: TDShadow(i1;vf3; ( global highp float)
+0:146    Function Parameters: 
+0:146      'lightIndex' ( in highp int)
+0:146      'worldSpacePos' ( in highp 3-component vector of float)
+0:147    Sequence
+0:147      Branch: Return with expression
+0:147        Constant:
+0:147          0.000000
+0:152  Function Definition: iTDRadicalInverse_VdC(u1; ( global highp float)
+0:152    Function Parameters: 
+0:152      'bits' ( in highp uint)
+0:154    Sequence
+0:154      move second child to first child ( temp highp uint)
+0:154        'bits' ( in highp uint)
+0:154        inclusive-or ( temp highp uint)
+0:154          left-shift ( temp highp uint)
+0:154            'bits' ( in highp uint)
+0:154            Constant:
+0:154              16 (const uint)
+0:154          right-shift ( temp highp uint)
+0:154            'bits' ( in highp uint)
+0:154            Constant:
+0:154              16 (const uint)
+0:155      move second child to first child ( temp highp uint)
+0:155        'bits' ( in highp uint)
+0:155        inclusive-or ( temp highp uint)
+0:155          left-shift ( temp highp uint)
+0:155            bitwise and ( temp highp uint)
+0:155              'bits' ( in highp uint)
+0:155              Constant:
+0:155                1431655765 (const uint)
+0:155            Constant:
+0:155              1 (const uint)
+0:155          right-shift ( temp highp uint)
+0:155            bitwise and ( temp highp uint)
+0:155              'bits' ( in highp uint)
+0:155              Constant:
+0:155                2863311530 (const uint)
+0:155            Constant:
+0:155              1 (const uint)
+0:156      move second child to first child ( temp highp uint)
+0:156        'bits' ( in highp uint)
+0:156        inclusive-or ( temp highp uint)
+0:156          left-shift ( temp highp uint)
+0:156            bitwise and ( temp highp uint)
+0:156              'bits' ( in highp uint)
+0:156              Constant:
+0:156                858993459 (const uint)
+0:156            Constant:
+0:156              2 (const uint)
+0:156          right-shift ( temp highp uint)
+0:156            bitwise and ( temp highp uint)
+0:156              'bits' ( in highp uint)
+0:156              Constant:
+0:156                3435973836 (const uint)
+0:156            Constant:
+0:156              2 (const uint)
+0:157      move second child to first child ( temp highp uint)
+0:157        'bits' ( in highp uint)
+0:157        inclusive-or ( temp highp uint)
+0:157          left-shift ( temp highp uint)
+0:157            bitwise and ( temp highp uint)
+0:157              'bits' ( in highp uint)
+0:157              Constant:
+0:157                252645135 (const uint)
+0:157            Constant:
+0:157              4 (const uint)
+0:157          right-shift ( temp highp uint)
+0:157            bitwise and ( temp highp uint)
+0:157              'bits' ( in highp uint)
+0:157              Constant:
+0:157                4042322160 (const uint)
+0:157            Constant:
+0:157              4 (const uint)
+0:158      move second child to first child ( temp highp uint)
+0:158        'bits' ( in highp uint)
+0:158        inclusive-or ( temp highp uint)
+0:158          left-shift ( temp highp uint)
+0:158            bitwise and ( temp highp uint)
+0:158              'bits' ( in highp uint)
+0:158              Constant:
+0:158                16711935 (const uint)
+0:158            Constant:
+0:158              8 (const uint)
+0:158          right-shift ( temp highp uint)
+0:158            bitwise and ( temp highp uint)
+0:158              'bits' ( in highp uint)
+0:158              Constant:
+0:158                4278255360 (const uint)
+0:158            Constant:
+0:158              8 (const uint)
+0:159      Branch: Return with expression
+0:159        component-wise multiply ( temp highp float)
+0:159          Convert uint to float ( temp highp float)
+0:159            'bits' ( in highp uint)
+0:159          Constant:
+0:159            2.3283064365387e-10
+0:161  Function Definition: iTDHammersley(u1;u1; ( global highp 2-component vector of float)
+0:161    Function Parameters: 
+0:161      'i' ( in highp uint)
+0:161      'N' ( in highp uint)
+0:163    Sequence
+0:163      Branch: Return with expression
+0:163        Construct vec2 ( temp highp 2-component vector of float)
+0:163          divide ( temp highp float)
+0:163            Convert uint to float ( temp highp float)
+0:163              'i' ( in highp uint)
+0:163            Convert uint to float ( temp highp float)
+0:163              'N' ( in highp uint)
+0:163          Function Call: iTDRadicalInverse_VdC(u1; ( global highp float)
+0:163            'i' ( in highp uint)
+0:165  Function Definition: iTDImportanceSampleGGX(vf2;f1;vf3; ( global highp 3-component vector of float)
+0:165    Function Parameters: 
+0:165      'Xi' ( in highp 2-component vector of float)
+0:165      'roughness2' ( in highp float)
+0:165      'N' ( in highp 3-component vector of float)
+0:167    Sequence
+0:167      Sequence
+0:167        move second child to first child ( temp highp float)
+0:167          'a' ( temp highp float)
+0:167          'roughness2' ( in highp float)
+0:168      Sequence
+0:168        move second child to first child ( temp highp float)
+0:168          'phi' ( temp highp float)
+0:168          component-wise multiply ( temp highp float)
+0:168            Constant:
+0:168              6.283185
+0:168            direct index ( temp highp float)
+0:168              'Xi' ( in highp 2-component vector of float)
+0:168              Constant:
+0:168                0 (const int)
+0:169      Sequence
+0:169        move second child to first child ( temp highp float)
+0:169          'cosTheta' ( temp highp float)
+0:169          sqrt ( global highp float)
+0:169            divide ( temp highp float)
+0:169              subtract ( temp highp float)
+0:169                Constant:
+0:169                  1.000000
+0:169                direct index ( temp highp float)
+0:169                  'Xi' ( in highp 2-component vector of float)
+0:169                  Constant:
+0:169                    1 (const int)
+0:169              add ( temp highp float)
+0:169                Constant:
+0:169                  1.000000
+0:169                component-wise multiply ( temp highp float)
+0:169                  subtract ( temp highp float)
+0:169                    component-wise multiply ( temp highp float)
+0:169                      'a' ( temp highp float)
+0:169                      'a' ( temp highp float)
+0:169                    Constant:
+0:169                      1.000000
+0:169                  direct index ( temp highp float)
+0:169                    'Xi' ( in highp 2-component vector of float)
+0:169                    Constant:
+0:169                      1 (const int)
+0:170      Sequence
+0:170        move second child to first child ( temp highp float)
+0:170          'sinTheta' ( temp highp float)
+0:170          sqrt ( global highp float)
+0:170            subtract ( temp highp float)
+0:170              Constant:
+0:170                1.000000
+0:170              component-wise multiply ( temp highp float)
+0:170                'cosTheta' ( temp highp float)
+0:170                'cosTheta' ( temp highp float)
+0:173      move second child to first child ( temp highp float)
+0:173        direct index ( temp highp float)
+0:173          'H' ( temp highp 3-component vector of float)
+0:173          Constant:
+0:173            0 (const int)
+0:173        component-wise multiply ( temp highp float)
+0:173          'sinTheta' ( temp highp float)
+0:173          cosine ( global highp float)
+0:173            'phi' ( temp highp float)
+0:174      move second child to first child ( temp highp float)
+0:174        direct index ( temp highp float)
+0:174          'H' ( temp highp 3-component vector of float)
+0:174          Constant:
+0:174            1 (const int)
+0:174        component-wise multiply ( temp highp float)
+0:174          'sinTheta' ( temp highp float)
+0:174          sine ( global highp float)
+0:174            'phi' ( temp highp float)
+0:175      move second child to first child ( temp highp float)
+0:175        direct index ( temp highp float)
+0:175          'H' ( temp highp 3-component vector of float)
+0:175          Constant:
+0:175            2 (const int)
+0:175        'cosTheta' ( temp highp float)
+0:177      Sequence
+0:177        move second child to first child ( temp highp 3-component vector of float)
+0:177          'upVector' ( temp highp 3-component vector of float)
+0:177          Test condition and select ( temp highp 3-component vector of float)
+0:177            Condition
+0:177            Compare Less Than ( temp bool)
+0:177              Absolute value ( global highp float)
+0:177                direct index ( temp highp float)
+0:177                  'N' ( in highp 3-component vector of float)
+0:177                  Constant:
+0:177                    2 (const int)
+0:177              Constant:
+0:177                0.999000
+0:177            true case
+0:177            Constant:
+0:177              0.000000
+0:177              0.000000
+0:177              1.000000
+0:177            false case
+0:177            Constant:
+0:177              1.000000
+0:177              0.000000
+0:177              0.000000
+0:178      Sequence
+0:178        move second child to first child ( temp highp 3-component vector of float)
+0:178          'tangentX' ( temp highp 3-component vector of float)
+0:178          normalize ( global highp 3-component vector of float)
+0:178            cross-product ( global highp 3-component vector of float)
+0:178              'upVector' ( temp highp 3-component vector of float)
+0:178              'N' ( in highp 3-component vector of float)
+0:179      Sequence
+0:179        move second child to first child ( temp highp 3-component vector of float)
+0:179          'tangentY' ( temp highp 3-component vector of float)
+0:179          cross-product ( global highp 3-component vector of float)
+0:179            'N' ( in highp 3-component vector of float)
+0:179            'tangentX' ( temp highp 3-component vector of float)
+0:182      Sequence
+0:182        move second child to first child ( temp highp 3-component vector of float)
+0:182          'worldResult' ( temp highp 3-component vector of float)
+0:182          add ( temp highp 3-component vector of float)
+0:182            add ( temp highp 3-component vector of float)
+0:182              vector-scale ( temp highp 3-component vector of float)
+0:182                'tangentX' ( temp highp 3-component vector of float)
+0:182                direct index ( temp highp float)
+0:182                  'H' ( temp highp 3-component vector of float)
+0:182                  Constant:
+0:182                    0 (const int)
+0:182              vector-scale ( temp highp 3-component vector of float)
+0:182                'tangentY' ( temp highp 3-component vector of float)
+0:182                direct index ( temp highp float)
+0:182                  'H' ( temp highp 3-component vector of float)
+0:182                  Constant:
+0:182                    1 (const int)
+0:182            vector-scale ( temp highp 3-component vector of float)
+0:182              'N' ( in highp 3-component vector of float)
+0:182              direct index ( temp highp float)
+0:182                'H' ( temp highp 3-component vector of float)
+0:182                Constant:
+0:182                  2 (const int)
+0:183      Branch: Return with expression
+0:183        'worldResult' ( temp highp 3-component vector of float)
+0:185  Function Definition: iTDDistributionGGX(vf3;vf3;f1; ( global highp float)
+0:185    Function Parameters: 
+0:185      'normal' ( in highp 3-component vector of float)
+0:185      'half_vector' ( in highp 3-component vector of float)
+0:185      'roughness2' ( in highp float)
+0:?     Sequence
+0:189      Sequence
+0:189        move second child to first child ( temp highp float)
+0:189          'NdotH' ( temp highp float)
+0:189          clamp ( global highp float)
+0:189            dot-product ( global highp float)
+0:189              'normal' ( in highp 3-component vector of float)
+0:189              'half_vector' ( in highp 3-component vector of float)
+0:189            Constant:
+0:189              1.0000000000000e-06
+0:189            Constant:
+0:189              1.000000
+0:191      Sequence
+0:191        move second child to first child ( temp highp float)
+0:191          'alpha2' ( temp highp float)
+0:191          component-wise multiply ( temp highp float)
+0:191            'roughness2' ( in highp float)
+0:191            'roughness2' ( in highp float)
+0:193      Sequence
+0:193        move second child to first child ( temp highp float)
+0:193          'denom' ( temp highp float)
+0:193          add ( temp highp float)
+0:193            component-wise multiply ( temp highp float)
+0:193              component-wise multiply ( temp highp float)
+0:193                'NdotH' ( temp highp float)
+0:193                'NdotH' ( temp highp float)
+0:193              subtract ( temp highp float)
+0:193                'alpha2' ( temp highp float)
+0:193                Constant:
+0:193                  1.000000
+0:193            Constant:
+0:193              1.000000
+0:194      move second child to first child ( temp highp float)
+0:194        'denom' ( temp highp float)
+0:194        max ( global highp float)
+0:194          Constant:
+0:194            1.0000000000000e-08
+0:194          'denom' ( temp highp float)
+0:195      Branch: Return with expression
+0:195        divide ( temp highp float)
+0:195          'alpha2' ( temp highp float)
+0:195          component-wise multiply ( temp highp float)
+0:195            component-wise multiply ( temp highp float)
+0:195              Constant:
+0:195                3.141593
+0:195              'denom' ( temp highp float)
+0:195            'denom' ( temp highp float)
+0:197  Function Definition: iTDCalcF(vf3;f1; ( global highp 3-component vector of float)
+0:197    Function Parameters: 
+0:197      'F0' ( in highp 3-component vector of float)
+0:197      'VdotH' ( in highp float)
+0:198    Sequence
+0:198      Branch: Return with expression
+0:198        add ( temp highp 3-component vector of float)
+0:198          'F0' ( in highp 3-component vector of float)
+0:198          vector-scale ( temp highp 3-component vector of float)
+0:198            subtract ( temp highp 3-component vector of float)
+0:198              Constant:
+0:198                1.000000
+0:198                1.000000
+0:198                1.000000
+0:198              'F0' ( in highp 3-component vector of float)
+0:198            pow ( global highp float)
+0:198              Constant:
+0:198                2.000000
+0:198              component-wise multiply ( temp highp float)
+0:198                subtract ( temp highp float)
+0:198                  component-wise multiply ( temp highp float)
+0:198                    Constant:
+0:198                      -5.554730
+0:198                    'VdotH' ( in highp float)
+0:198                  Constant:
+0:198                    6.983160
+0:198                'VdotH' ( in highp float)
+0:201  Function Definition: iTDCalcG(f1;f1;f1; ( global highp float)
+0:201    Function Parameters: 
+0:201      'NdotL' ( in highp float)
+0:201      'NdotV' ( in highp float)
+0:201      'k' ( in highp float)
+0:202    Sequence
+0:202      Sequence
+0:202        move second child to first child ( temp highp float)
+0:202          'Gl' ( temp highp float)
+0:202          divide ( temp highp float)
+0:202            Constant:
+0:202              1.000000
+0:202            add ( temp highp float)
+0:202              component-wise multiply ( temp highp float)
+0:202                'NdotL' ( in highp float)
+0:202                subtract ( temp highp float)
+0:202                  Constant:
+0:202                    1.000000
+0:202                  'k' ( in highp float)
+0:202              'k' ( in highp float)
+0:203      Sequence
+0:203        move second child to first child ( temp highp float)
+0:203          'Gv' ( temp highp float)
+0:203          divide ( temp highp float)
+0:203            Constant:
+0:203              1.000000
+0:203            add ( temp highp float)
+0:203              component-wise multiply ( temp highp float)
+0:203                'NdotV' ( in highp float)
+0:203                subtract ( temp highp float)
+0:203                  Constant:
+0:203                    1.000000
+0:203                  'k' ( in highp float)
+0:203              'k' ( in highp float)
+0:204      Branch: Return with expression
+0:204        component-wise multiply ( temp highp float)
+0:204          'Gl' ( temp highp float)
+0:204          'Gv' ( temp highp float)
+0:207  Function Definition: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:207    Function Parameters: 
+0:207      'index' ( in highp int)
+0:207      'diffuseColor' ( in highp 3-component vector of float)
+0:207      'specularColor' ( in highp 3-component vector of float)
+0:207      'worldSpacePos' ( in highp 3-component vector of float)
+0:207      'normal' ( in highp 3-component vector of float)
+0:207      'shadowStrength' ( in highp float)
+0:207      'shadowColor' ( in highp 3-component vector of float)
+0:207      'camVector' ( in highp 3-component vector of float)
+0:207      'roughness' ( in highp float)
+0:?     Sequence
+0:210      Branch: Return with expression
+0:210        'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:213  Function Definition: TDLightingPBR(vf3;vf3;f1;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global void)
+0:213    Function Parameters: 
+0:213      'diffuseContrib' ( inout highp 3-component vector of float)
+0:213      'specularContrib' ( inout highp 3-component vector of float)
+0:213      'shadowStrengthOut' ( inout highp float)
+0:213      'index' ( in highp int)
+0:213      'diffuseColor' ( in highp 3-component vector of float)
+0:213      'specularColor' ( in highp 3-component vector of float)
+0:213      'worldSpacePos' ( in highp 3-component vector of float)
+0:213      'normal' ( in highp 3-component vector of float)
+0:213      'shadowStrength' ( in highp float)
+0:213      'shadowColor' ( in highp 3-component vector of float)
+0:213      'camVector' ( in highp 3-component vector of float)
+0:213      'roughness' ( in highp float)
+0:215    Sequence
+0:215      Sequence
+0:215        move second child to first child ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:215          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:215          Function Call: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:215            'index' ( in highp int)
+0:215            'diffuseColor' ( in highp 3-component vector of float)
+0:215            'specularColor' ( in highp 3-component vector of float)
+0:215            'worldSpacePos' ( in highp 3-component vector of float)
+0:215            'normal' ( in highp 3-component vector of float)
+0:215            'shadowStrength' ( in highp float)
+0:215            'shadowColor' ( in highp 3-component vector of float)
+0:215            'camVector' ( in highp 3-component vector of float)
+0:215            'roughness' ( in highp float)
+0:215      move second child to first child ( temp highp 3-component vector of float)
+0:215        'diffuseContrib' ( inout highp 3-component vector of float)
+0:215        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:215          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:215          Constant:
+0:215            0 (const int)
+0:216      move second child to first child ( temp highp 3-component vector of float)
+0:216        'specularContrib' ( inout highp 3-component vector of float)
+0:216        specular: direct index for structure ( global highp 3-component vector of float)
+0:216          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:216          Constant:
+0:216            1 (const int)
+0:217      move second child to first child ( temp highp float)
+0:217        'shadowStrengthOut' ( inout highp float)
+0:217        shadowStrength: direct index for structure ( global highp float)
+0:217          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:217          Constant:
+0:217            2 (const int)
+0:220  Function Definition: TDLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global void)
+0:220    Function Parameters: 
+0:220      'diffuseContrib' ( inout highp 3-component vector of float)
+0:220      'specularContrib' ( inout highp 3-component vector of float)
+0:220      'index' ( in highp int)
+0:220      'diffuseColor' ( in highp 3-component vector of float)
+0:220      'specularColor' ( in highp 3-component vector of float)
+0:220      'worldSpacePos' ( in highp 3-component vector of float)
+0:220      'normal' ( in highp 3-component vector of float)
+0:220      'shadowStrength' ( in highp float)
+0:220      'shadowColor' ( in highp 3-component vector of float)
+0:220      'camVector' ( in highp 3-component vector of float)
+0:220      'roughness' ( in highp float)
+0:222    Sequence
+0:222      Sequence
+0:222        move second child to first child ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:222          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:222          Function Call: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:222            'index' ( in highp int)
+0:222            'diffuseColor' ( in highp 3-component vector of float)
+0:222            'specularColor' ( in highp 3-component vector of float)
+0:222            'worldSpacePos' ( in highp 3-component vector of float)
+0:222            'normal' ( in highp 3-component vector of float)
+0:222            'shadowStrength' ( in highp float)
+0:222            'shadowColor' ( in highp 3-component vector of float)
+0:222            'camVector' ( in highp 3-component vector of float)
+0:222            'roughness' ( in highp float)
+0:222      move second child to first child ( temp highp 3-component vector of float)
+0:222        'diffuseContrib' ( inout highp 3-component vector of float)
+0:222        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:222          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:222          Constant:
+0:222            0 (const int)
+0:223      move second child to first child ( temp highp 3-component vector of float)
+0:223        'specularContrib' ( inout highp 3-component vector of float)
+0:223        specular: direct index for structure ( global highp 3-component vector of float)
+0:223          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:223          Constant:
+0:223            1 (const int)
+0:226  Function Definition: TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:226    Function Parameters: 
+0:226      'index' ( in highp int)
+0:226      'diffuseColor' ( in highp 3-component vector of float)
+0:226      'specularColor' ( in highp 3-component vector of float)
+0:226      'normal' ( in highp 3-component vector of float)
+0:226      'camVector' ( in highp 3-component vector of float)
+0:226      'roughness' ( in highp float)
+0:226      'ambientOcclusion' ( in highp float)
+0:?     Sequence
+0:229      Branch: Return with expression
+0:229        'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:232  Function Definition: TDEnvLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;f1; ( global void)
+0:232    Function Parameters: 
+0:232      'diffuseContrib' ( inout highp 3-component vector of float)
+0:232      'specularContrib' ( inout highp 3-component vector of float)
+0:232      'index' ( in highp int)
+0:232      'diffuseColor' ( in highp 3-component vector of float)
+0:232      'specularColor' ( in highp 3-component vector of float)
+0:232      'normal' ( in highp 3-component vector of float)
+0:232      'camVector' ( in highp 3-component vector of float)
+0:232      'roughness' ( in highp float)
+0:232      'ambientOcclusion' ( in highp float)
+0:234    Sequence
+0:234      Sequence
+0:234        move second child to first child ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:234          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:234          Function Call: TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:234            'index' ( in highp int)
+0:234            'diffuseColor' ( in highp 3-component vector of float)
+0:234            'specularColor' ( in highp 3-component vector of float)
+0:234            'normal' ( in highp 3-component vector of float)
+0:234            'camVector' ( in highp 3-component vector of float)
+0:234            'roughness' ( in highp float)
+0:234            'ambientOcclusion' ( in highp float)
+0:235      move second child to first child ( temp highp 3-component vector of float)
+0:235        'diffuseContrib' ( inout highp 3-component vector of float)
+0:235        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:235          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:235          Constant:
+0:235            0 (const int)
+0:236      move second child to first child ( temp highp 3-component vector of float)
+0:236        'specularContrib' ( inout highp 3-component vector of float)
+0:236        specular: direct index for structure ( global highp 3-component vector of float)
+0:236          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp float shadowStrength})
+0:236          Constant:
+0:236            1 (const int)
+0:239  Function Definition: TDLighting(i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:239    Function Parameters: 
+0:239      'index' ( in highp int)
+0:239      'worldSpacePos' ( in highp 3-component vector of float)
+0:239      'normal' ( in highp 3-component vector of float)
+0:239      'shadowStrength' ( in highp float)
+0:239      'shadowColor' ( in highp 3-component vector of float)
+0:239      'camVector' ( in highp 3-component vector of float)
+0:239      'shininess' ( in highp float)
+0:239      'shininess2' ( in highp float)
+0:?     Sequence
+0:242      switch
+0:242      condition
+0:242        'index' ( in highp int)
+0:242      body
+0:242        Sequence
+0:244          default: 
+0:?           Sequence
+0:245            move second child to first child ( temp highp 3-component vector of float)
+0:245              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:245                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:245                Constant:
+0:245                  0 (const int)
+0:245              Constant:
+0:245                0.000000
+0:245                0.000000
+0:245                0.000000
+0:246            move second child to first child ( temp highp 3-component vector of float)
+0:246              specular: direct index for structure ( global highp 3-component vector of float)
+0:246                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:246                Constant:
+0:246                  1 (const int)
+0:246              Constant:
+0:246                0.000000
+0:246                0.000000
+0:246                0.000000
+0:247            move second child to first child ( temp highp 3-component vector of float)
+0:247              specular2: direct index for structure ( global highp 3-component vector of float)
+0:247                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:247                Constant:
+0:247                  2 (const int)
+0:247              Constant:
+0:247                0.000000
+0:247                0.000000
+0:247                0.000000
+0:248            move second child to first child ( temp highp float)
+0:248              shadowStrength: direct index for structure ( global highp float)
+0:248                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:248                Constant:
+0:248                  3 (const int)
+0:248              Constant:
+0:248                0.000000
+0:249            Branch: Break
+0:251      Branch: Return with expression
+0:251        'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:254  Function Definition: TDLighting(vf3;vf3;vf3;f1;i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global void)
+0:254    Function Parameters: 
+0:254      'diffuseContrib' ( inout highp 3-component vector of float)
+0:254      'specularContrib' ( inout highp 3-component vector of float)
+0:254      'specularContrib2' ( inout highp 3-component vector of float)
+0:254      'shadowStrengthOut' ( inout highp float)
+0:254      'index' ( in highp int)
+0:254      'worldSpacePos' ( in highp 3-component vector of float)
+0:254      'normal' ( in highp 3-component vector of float)
+0:254      'shadowStrength' ( in highp float)
+0:254      'shadowColor' ( in highp 3-component vector of float)
+0:254      'camVector' ( in highp 3-component vector of float)
+0:254      'shininess' ( in highp float)
+0:254      'shininess2' ( in highp float)
+0:?     Sequence
+0:257      switch
+0:257      condition
+0:257        'index' ( in highp int)
+0:257      body
+0:257        Sequence
+0:259          default: 
+0:?           Sequence
+0:260            move second child to first child ( temp highp 3-component vector of float)
+0:260              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:260                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:260                Constant:
+0:260                  0 (const int)
+0:260              Constant:
+0:260                0.000000
+0:260                0.000000
+0:260                0.000000
+0:261            move second child to first child ( temp highp 3-component vector of float)
+0:261              specular: direct index for structure ( global highp 3-component vector of float)
+0:261                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:261                Constant:
+0:261                  1 (const int)
+0:261              Constant:
+0:261                0.000000
+0:261                0.000000
+0:261                0.000000
+0:262            move second child to first child ( temp highp 3-component vector of float)
+0:262              specular2: direct index for structure ( global highp 3-component vector of float)
+0:262                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:262                Constant:
+0:262                  2 (const int)
+0:262              Constant:
+0:262                0.000000
+0:262                0.000000
+0:262                0.000000
+0:263            move second child to first child ( temp highp float)
+0:263              shadowStrength: direct index for structure ( global highp float)
+0:263                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:263                Constant:
+0:263                  3 (const int)
+0:263              Constant:
+0:263                0.000000
+0:264            Branch: Break
+0:266      move second child to first child ( temp highp 3-component vector of float)
+0:266        'diffuseContrib' ( inout highp 3-component vector of float)
+0:266        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:266          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:266          Constant:
+0:266            0 (const int)
+0:267      move second child to first child ( temp highp 3-component vector of float)
+0:267        'specularContrib' ( inout highp 3-component vector of float)
+0:267        specular: direct index for structure ( global highp 3-component vector of float)
+0:267          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:267          Constant:
+0:267            1 (const int)
+0:268      move second child to first child ( temp highp 3-component vector of float)
+0:268        'specularContrib2' ( inout highp 3-component vector of float)
+0:268        specular2: direct index for structure ( global highp 3-component vector of float)
+0:268          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:268          Constant:
+0:268            2 (const int)
+0:269      move second child to first child ( temp highp float)
+0:269        'shadowStrengthOut' ( inout highp float)
+0:269        shadowStrength: direct index for structure ( global highp float)
+0:269          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:269          Constant:
+0:269            3 (const int)
+0:272  Function Definition: TDLighting(vf3;vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global void)
+0:272    Function Parameters: 
+0:272      'diffuseContrib' ( inout highp 3-component vector of float)
+0:272      'specularContrib' ( inout highp 3-component vector of float)
+0:272      'specularContrib2' ( inout highp 3-component vector of float)
+0:272      'index' ( in highp int)
+0:272      'worldSpacePos' ( in highp 3-component vector of float)
+0:272      'normal' ( in highp 3-component vector of float)
+0:272      'shadowStrength' ( in highp float)
+0:272      'shadowColor' ( in highp 3-component vector of float)
+0:272      'camVector' ( in highp 3-component vector of float)
+0:272      'shininess' ( in highp float)
+0:272      'shininess2' ( in highp float)
+0:?     Sequence
+0:275      switch
+0:275      condition
+0:275        'index' ( in highp int)
+0:275      body
+0:275        Sequence
+0:277          default: 
+0:?           Sequence
+0:278            move second child to first child ( temp highp 3-component vector of float)
+0:278              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:278                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:278                Constant:
+0:278                  0 (const int)
+0:278              Constant:
+0:278                0.000000
+0:278                0.000000
+0:278                0.000000
+0:279            move second child to first child ( temp highp 3-component vector of float)
+0:279              specular: direct index for structure ( global highp 3-component vector of float)
+0:279                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:279                Constant:
+0:279                  1 (const int)
+0:279              Constant:
+0:279                0.000000
+0:279                0.000000
+0:279                0.000000
+0:280            move second child to first child ( temp highp 3-component vector of float)
+0:280              specular2: direct index for structure ( global highp 3-component vector of float)
+0:280                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:280                Constant:
+0:280                  2 (const int)
+0:280              Constant:
+0:280                0.000000
+0:280                0.000000
+0:280                0.000000
+0:281            move second child to first child ( temp highp float)
+0:281              shadowStrength: direct index for structure ( global highp float)
+0:281                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:281                Constant:
+0:281                  3 (const int)
+0:281              Constant:
+0:281                0.000000
+0:282            Branch: Break
+0:284      move second child to first child ( temp highp 3-component vector of float)
+0:284        'diffuseContrib' ( inout highp 3-component vector of float)
+0:284        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:284          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:284          Constant:
+0:284            0 (const int)
+0:285      move second child to first child ( temp highp 3-component vector of float)
+0:285        'specularContrib' ( inout highp 3-component vector of float)
+0:285        specular: direct index for structure ( global highp 3-component vector of float)
+0:285          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:285          Constant:
+0:285            1 (const int)
+0:286      move second child to first child ( temp highp 3-component vector of float)
+0:286        'specularContrib2' ( inout highp 3-component vector of float)
+0:286        specular2: direct index for structure ( global highp 3-component vector of float)
+0:286          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:286          Constant:
+0:286            2 (const int)
+0:289  Function Definition: TDLighting(vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1; ( global void)
+0:289    Function Parameters: 
+0:289      'diffuseContrib' ( inout highp 3-component vector of float)
+0:289      'specularContrib' ( inout highp 3-component vector of float)
+0:289      'index' ( in highp int)
+0:289      'worldSpacePos' ( in highp 3-component vector of float)
+0:289      'normal' ( in highp 3-component vector of float)
+0:289      'shadowStrength' ( in highp float)
+0:289      'shadowColor' ( in highp 3-component vector of float)
+0:289      'camVector' ( in highp 3-component vector of float)
+0:289      'shininess' ( in highp float)
+0:?     Sequence
+0:292      switch
+0:292      condition
+0:292        'index' ( in highp int)
+0:292      body
+0:292        Sequence
+0:294          default: 
+0:?           Sequence
+0:295            move second child to first child ( temp highp 3-component vector of float)
+0:295              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:295                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:295                Constant:
+0:295                  0 (const int)
+0:295              Constant:
+0:295                0.000000
+0:295                0.000000
+0:295                0.000000
+0:296            move second child to first child ( temp highp 3-component vector of float)
+0:296              specular: direct index for structure ( global highp 3-component vector of float)
+0:296                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:296                Constant:
+0:296                  1 (const int)
+0:296              Constant:
+0:296                0.000000
+0:296                0.000000
+0:296                0.000000
+0:297            move second child to first child ( temp highp 3-component vector of float)
+0:297              specular2: direct index for structure ( global highp 3-component vector of float)
+0:297                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:297                Constant:
+0:297                  2 (const int)
+0:297              Constant:
+0:297                0.000000
+0:297                0.000000
+0:297                0.000000
+0:298            move second child to first child ( temp highp float)
+0:298              shadowStrength: direct index for structure ( global highp float)
+0:298                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:298                Constant:
+0:298                  3 (const int)
+0:298              Constant:
+0:298                0.000000
+0:299            Branch: Break
+0:301      move second child to first child ( temp highp 3-component vector of float)
+0:301        'diffuseContrib' ( inout highp 3-component vector of float)
+0:301        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:301          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:301          Constant:
+0:301            0 (const int)
+0:302      move second child to first child ( temp highp 3-component vector of float)
+0:302        'specularContrib' ( inout highp 3-component vector of float)
+0:302        specular: direct index for structure ( global highp 3-component vector of float)
+0:302          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:302          Constant:
+0:302            1 (const int)
+0:305  Function Definition: TDLighting(vf3;vf3;vf3;i1;vf3;vf3;vf3;f1;f1; ( global void)
+0:305    Function Parameters: 
+0:305      'diffuseContrib' ( inout highp 3-component vector of float)
+0:305      'specularContrib' ( inout highp 3-component vector of float)
+0:305      'specularContrib2' ( inout highp 3-component vector of float)
+0:305      'index' ( in highp int)
+0:305      'worldSpacePos' ( in highp 3-component vector of float)
+0:305      'normal' ( in highp 3-component vector of float)
+0:305      'camVector' ( in highp 3-component vector of float)
+0:305      'shininess' ( in highp float)
+0:305      'shininess2' ( in highp float)
+0:?     Sequence
+0:308      switch
+0:308      condition
+0:308        'index' ( in highp int)
+0:308      body
+0:308        Sequence
+0:310          default: 
+0:?           Sequence
+0:311            move second child to first child ( temp highp 3-component vector of float)
+0:311              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:311                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:311                Constant:
+0:311                  0 (const int)
+0:311              Constant:
+0:311                0.000000
+0:311                0.000000
+0:311                0.000000
+0:312            move second child to first child ( temp highp 3-component vector of float)
+0:312              specular: direct index for structure ( global highp 3-component vector of float)
+0:312                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:312                Constant:
+0:312                  1 (const int)
+0:312              Constant:
+0:312                0.000000
+0:312                0.000000
+0:312                0.000000
+0:313            move second child to first child ( temp highp 3-component vector of float)
+0:313              specular2: direct index for structure ( global highp 3-component vector of float)
+0:313                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:313                Constant:
+0:313                  2 (const int)
+0:313              Constant:
+0:313                0.000000
+0:313                0.000000
+0:313                0.000000
+0:314            move second child to first child ( temp highp float)
+0:314              shadowStrength: direct index for structure ( global highp float)
+0:314                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:314                Constant:
+0:314                  3 (const int)
+0:314              Constant:
+0:314                0.000000
+0:315            Branch: Break
+0:317      move second child to first child ( temp highp 3-component vector of float)
+0:317        'diffuseContrib' ( inout highp 3-component vector of float)
+0:317        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:317          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:317          Constant:
+0:317            0 (const int)
+0:318      move second child to first child ( temp highp 3-component vector of float)
+0:318        'specularContrib' ( inout highp 3-component vector of float)
+0:318        specular: direct index for structure ( global highp 3-component vector of float)
+0:318          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:318          Constant:
+0:318            1 (const int)
+0:319      move second child to first child ( temp highp 3-component vector of float)
+0:319        'specularContrib2' ( inout highp 3-component vector of float)
+0:319        specular2: direct index for structure ( global highp 3-component vector of float)
+0:319          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:319          Constant:
+0:319            2 (const int)
+0:322  Function Definition: TDLighting(vf3;vf3;i1;vf3;vf3;vf3;f1; ( global void)
+0:322    Function Parameters: 
+0:322      'diffuseContrib' ( inout highp 3-component vector of float)
+0:322      'specularContrib' ( inout highp 3-component vector of float)
+0:322      'index' ( in highp int)
+0:322      'worldSpacePos' ( in highp 3-component vector of float)
+0:322      'normal' ( in highp 3-component vector of float)
+0:322      'camVector' ( in highp 3-component vector of float)
+0:322      'shininess' ( in highp float)
+0:?     Sequence
+0:325      switch
+0:325      condition
+0:325        'index' ( in highp int)
+0:325      body
+0:325        Sequence
+0:327          default: 
+0:?           Sequence
+0:328            move second child to first child ( temp highp 3-component vector of float)
+0:328              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:328                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:328                Constant:
+0:328                  0 (const int)
+0:328              Constant:
+0:328                0.000000
+0:328                0.000000
+0:328                0.000000
+0:329            move second child to first child ( temp highp 3-component vector of float)
+0:329              specular: direct index for structure ( global highp 3-component vector of float)
+0:329                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:329                Constant:
+0:329                  1 (const int)
+0:329              Constant:
+0:329                0.000000
+0:329                0.000000
+0:329                0.000000
+0:330            move second child to first child ( temp highp 3-component vector of float)
+0:330              specular2: direct index for structure ( global highp 3-component vector of float)
+0:330                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:330                Constant:
+0:330                  2 (const int)
+0:330              Constant:
+0:330                0.000000
+0:330                0.000000
+0:330                0.000000
+0:331            move second child to first child ( temp highp float)
+0:331              shadowStrength: direct index for structure ( global highp float)
+0:331                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:331                Constant:
+0:331                  3 (const int)
+0:331              Constant:
+0:331                0.000000
+0:332            Branch: Break
+0:334      move second child to first child ( temp highp 3-component vector of float)
+0:334        'diffuseContrib' ( inout highp 3-component vector of float)
+0:334        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:334          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:334          Constant:
+0:334            0 (const int)
+0:335      move second child to first child ( temp highp 3-component vector of float)
+0:335        'specularContrib' ( inout highp 3-component vector of float)
+0:335        specular: direct index for structure ( global highp 3-component vector of float)
+0:335          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:335          Constant:
+0:335            1 (const int)
+0:338  Function Definition: TDLighting(vf3;i1;vf3;vf3; ( global void)
+0:338    Function Parameters: 
+0:338      'diffuseContrib' ( inout highp 3-component vector of float)
+0:338      'index' ( in highp int)
+0:338      'worldSpacePos' ( in highp 3-component vector of float)
+0:338      'normal' ( in highp 3-component vector of float)
+0:?     Sequence
+0:341      switch
+0:341      condition
+0:341        'index' ( in highp int)
+0:341      body
+0:341        Sequence
+0:343          default: 
+0:?           Sequence
+0:344            move second child to first child ( temp highp 3-component vector of float)
+0:344              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:344                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:344                Constant:
+0:344                  0 (const int)
+0:344              Constant:
+0:344                0.000000
+0:344                0.000000
+0:344                0.000000
+0:345            move second child to first child ( temp highp 3-component vector of float)
+0:345              specular: direct index for structure ( global highp 3-component vector of float)
+0:345                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:345                Constant:
+0:345                  1 (const int)
+0:345              Constant:
+0:345                0.000000
+0:345                0.000000
+0:345                0.000000
+0:346            move second child to first child ( temp highp 3-component vector of float)
+0:346              specular2: direct index for structure ( global highp 3-component vector of float)
+0:346                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:346                Constant:
+0:346                  2 (const int)
+0:346              Constant:
+0:346                0.000000
+0:346                0.000000
+0:346                0.000000
+0:347            move second child to first child ( temp highp float)
+0:347              shadowStrength: direct index for structure ( global highp float)
+0:347                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:347                Constant:
+0:347                  3 (const int)
+0:347              Constant:
+0:347                0.000000
+0:348            Branch: Break
+0:350      move second child to first child ( temp highp 3-component vector of float)
+0:350        'diffuseContrib' ( inout highp 3-component vector of float)
+0:350        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:350          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:350          Constant:
+0:350            0 (const int)
+0:353  Function Definition: TDLighting(vf3;i1;vf3;vf3;f1;vf3; ( global void)
+0:353    Function Parameters: 
+0:353      'diffuseContrib' ( inout highp 3-component vector of float)
+0:353      'index' ( in highp int)
+0:353      'worldSpacePos' ( in highp 3-component vector of float)
+0:353      'normal' ( in highp 3-component vector of float)
+0:353      'shadowStrength' ( in highp float)
+0:353      'shadowColor' ( in highp 3-component vector of float)
+0:?     Sequence
+0:356      switch
+0:356      condition
+0:356        'index' ( in highp int)
+0:356      body
+0:356        Sequence
+0:358          default: 
+0:?           Sequence
+0:359            move second child to first child ( temp highp 3-component vector of float)
+0:359              diffuse: direct index for structure ( global highp 3-component vector of float)
+0:359                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:359                Constant:
+0:359                  0 (const int)
+0:359              Constant:
+0:359                0.000000
+0:359                0.000000
+0:359                0.000000
+0:360            move second child to first child ( temp highp 3-component vector of float)
+0:360              specular: direct index for structure ( global highp 3-component vector of float)
+0:360                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:360                Constant:
+0:360                  1 (const int)
+0:360              Constant:
+0:360                0.000000
+0:360                0.000000
+0:360                0.000000
+0:361            move second child to first child ( temp highp 3-component vector of float)
+0:361              specular2: direct index for structure ( global highp 3-component vector of float)
+0:361                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:361                Constant:
+0:361                  2 (const int)
+0:361              Constant:
+0:361                0.000000
+0:361                0.000000
+0:361                0.000000
+0:362            move second child to first child ( temp highp float)
+0:362              shadowStrength: direct index for structure ( global highp float)
+0:362                'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:362                Constant:
+0:362                  3 (const int)
+0:362              Constant:
+0:362                0.000000
+0:363            Branch: Break
+0:365      move second child to first child ( temp highp 3-component vector of float)
+0:365        'diffuseContrib' ( inout highp 3-component vector of float)
+0:365        diffuse: direct index for structure ( global highp 3-component vector of float)
+0:365          'res' ( temp structure{ global highp 3-component vector of float diffuse,  global highp 3-component vector of float specular,  global highp 3-component vector of float specular2,  global highp float shadowStrength})
+0:365          Constant:
+0:365            0 (const int)
+0:367  Function Definition: TDProjMap(i1;vf3;vf4; ( global highp 4-component vector of float)
+0:367    Function Parameters: 
+0:367      'index' ( in highp int)
+0:367      'worldSpacePos' ( in highp 3-component vector of float)
+0:367      'defaultColor' ( in highp 4-component vector of float)
+0:368    Sequence
+0:368      switch
+0:368      condition
+0:368        'index' ( in highp int)
+0:368      body
+0:368        Sequence
+0:370          default: 
+0:?           Sequence
+0:370            Branch: Return with expression
+0:370              'defaultColor' ( in highp 4-component vector of float)
+0:373  Function Definition: TDFog(vf4;vf3;i1; ( global highp 4-component vector of float)
+0:373    Function Parameters: 
+0:373      'color' ( in highp 4-component vector of float)
+0:373      'lightingSpacePosition' ( in highp 3-component vector of float)
+0:373      'cameraIndex' ( in highp int)
+0:374    Sequence
+0:374      switch
+0:374      condition
+0:374        'cameraIndex' ( in highp int)
+0:374      body
+0:374        Sequence
+0:375          default: 
+0:376          case:  with expression
+0:376            Constant:
+0:376              0 (const int)
+0:?           Sequence
+0:378            Sequence
+0:378              Branch: Return with expression
+0:378                'color' ( in highp 4-component vector of float)
+0:382  Function Definition: TDFog(vf4;vf3; ( global highp 4-component vector of float)
+0:382    Function Parameters: 
+0:382      'color' ( in highp 4-component vector of float)
+0:382      'lightingSpacePosition' ( in highp 3-component vector of float)
+0:384    Sequence
+0:384      Branch: Return with expression
+0:384        Function Call: TDFog(vf4;vf3;i1; ( global highp 4-component vector of float)
+0:384          'color' ( in highp 4-component vector of float)
+0:384          'lightingSpacePosition' ( in highp 3-component vector of float)
+0:384          Constant:
+0:384            0 (const int)
+0:386  Function Definition: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float)
+0:386    Function Parameters: 
+0:386      'index' ( in highp int)
+0:386      't' ( in highp 3-component vector of float)
+0:?     Sequence
+0:388      Sequence
+0:388        move second child to first child ( temp highp int)
+0:388          'coord' ( temp highp int)
+0:388          'index' ( in highp int)
+0:389      Sequence
+0:389        move second child to first child ( temp highp 4-component vector of float)
+0:389          'samp' ( temp highp 4-component vector of float)
+0:389          textureFetch ( global highp 4-component vector of float)
+0:389            'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer)
+0:389            'coord' ( temp highp int)
+0:390      move second child to first child ( temp highp float)
+0:390        direct index ( temp highp float)
+0:390          'v' ( temp highp 3-component vector of float)
+0:390          Constant:
+0:390            0 (const int)
+0:390        direct index ( temp highp float)
+0:390          't' ( in highp 3-component vector of float)
+0:390          Constant:
+0:390            0 (const int)
+0:391      move second child to first child ( temp highp float)
+0:391        direct index ( temp highp float)
+0:391          'v' ( temp highp 3-component vector of float)
+0:391          Constant:
+0:391            1 (const int)
+0:391        direct index ( temp highp float)
+0:391          't' ( in highp 3-component vector of float)
+0:391          Constant:
+0:391            1 (const int)
+0:392      move second child to first child ( temp highp float)
+0:392        direct index ( temp highp float)
+0:392          'v' ( temp highp 3-component vector of float)
+0:392          Constant:
+0:392            2 (const int)
+0:392        direct index ( temp highp float)
+0:392          'samp' ( temp highp 4-component vector of float)
+0:392          Constant:
+0:392            0 (const int)
+0:393      move second child to first child ( temp highp 3-component vector of float)
+0:393        vector swizzle ( temp highp 3-component vector of float)
+0:393          't' ( in highp 3-component vector of float)
+0:393          Sequence
+0:393            Constant:
+0:393              0 (const int)
+0:393            Constant:
+0:393              1 (const int)
+0:393            Constant:
+0:393              2 (const int)
+0:393        vector swizzle ( temp highp 3-component vector of float)
+0:393          'v' ( temp highp 3-component vector of float)
+0:393          Sequence
+0:393            Constant:
+0:393              0 (const int)
+0:393            Constant:
+0:393              1 (const int)
+0:393            Constant:
+0:393              2 (const int)
+0:394      Branch: Return with expression
+0:394        't' ( in highp 3-component vector of float)
+0:396  Function Definition: TDInstanceActive(i1; ( global bool)
+0:396    Function Parameters: 
+0:396      'index' ( in highp int)
+0:397    Sequence
+0:397      subtract second child into first child ( temp highp int)
+0:397        'index' ( in highp int)
+0:397        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:397          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:397          Constant:
+0:397            0 (const uint)
+0:399      Sequence
+0:399        move second child to first child ( temp highp int)
+0:399          'coord' ( temp highp int)
+0:399          'index' ( in highp int)
+0:400      Sequence
+0:400        move second child to first child ( temp highp 4-component vector of float)
+0:400          'samp' ( temp highp 4-component vector of float)
+0:400          textureFetch ( global highp 4-component vector of float)
+0:400            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:400            'coord' ( temp highp int)
+0:401      move second child to first child ( temp highp float)
+0:401        'v' ( temp highp float)
+0:401        direct index ( temp highp float)
+0:401          'samp' ( temp highp 4-component vector of float)
+0:401          Constant:
+0:401            0 (const int)
+0:402      Branch: Return with expression
+0:402        Compare Not Equal ( temp bool)
+0:402          'v' ( temp highp float)
+0:402          Constant:
+0:402            0.000000
+0:404  Function Definition: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float)
+0:404    Function Parameters: 
+0:404      'index' ( in highp int)
+0:404      'instanceActive' ( out bool)
+0:405    Sequence
+0:405      Sequence
+0:405        move second child to first child ( temp highp int)
+0:405          'origIndex' ( temp highp int)
+0:405          'index' ( in highp int)
+0:406      subtract second child into first child ( temp highp int)
+0:406        'index' ( in highp int)
+0:406        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:406          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:406          Constant:
+0:406            0 (const uint)
+0:408      Sequence
+0:408        move second child to first child ( temp highp int)
+0:408          'coord' ( temp highp int)
+0:408          'index' ( in highp int)
+0:409      Sequence
+0:409        move second child to first child ( temp highp 4-component vector of float)
+0:409          'samp' ( temp highp 4-component vector of float)
+0:409          textureFetch ( global highp 4-component vector of float)
+0:409            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:409            'coord' ( temp highp int)
+0:410      move second child to first child ( temp highp float)
+0:410        direct index ( temp highp float)
+0:410          'v' ( temp highp 3-component vector of float)
+0:410          Constant:
+0:410            0 (const int)
+0:410        direct index ( temp highp float)
+0:410          'samp' ( temp highp 4-component vector of float)
+0:410          Constant:
+0:410            1 (const int)
+0:411      move second child to first child ( temp highp float)
+0:411        direct index ( temp highp float)
+0:411          'v' ( temp highp 3-component vector of float)
+0:411          Constant:
+0:411            1 (const int)
+0:411        direct index ( temp highp float)
+0:411          'samp' ( temp highp 4-component vector of float)
+0:411          Constant:
+0:411            2 (const int)
+0:412      move second child to first child ( temp highp float)
+0:412        direct index ( temp highp float)
+0:412          'v' ( temp highp 3-component vector of float)
+0:412          Constant:
+0:412            2 (const int)
+0:412        direct index ( temp highp float)
+0:412          'samp' ( temp highp 4-component vector of float)
+0:412          Constant:
+0:412            3 (const int)
+0:413      move second child to first child ( temp bool)
+0:413        'instanceActive' ( out bool)
+0:413        Compare Not Equal ( temp bool)
+0:413          direct index ( temp highp float)
+0:413            'samp' ( temp highp 4-component vector of float)
+0:413            Constant:
+0:413              0 (const int)
+0:413          Constant:
+0:413            0.000000
+0:414      Branch: Return with expression
+0:414        'v' ( temp highp 3-component vector of float)
+0:416  Function Definition: TDInstanceTranslate(i1; ( global highp 3-component vector of float)
+0:416    Function Parameters: 
+0:416      'index' ( in highp int)
+0:417    Sequence
+0:417      subtract second child into first child ( temp highp int)
+0:417        'index' ( in highp int)
+0:417        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:417          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:417          Constant:
+0:417            0 (const uint)
+0:419      Sequence
+0:419        move second child to first child ( temp highp int)
+0:419          'coord' ( temp highp int)
+0:419          'index' ( in highp int)
+0:420      Sequence
+0:420        move second child to first child ( temp highp 4-component vector of float)
+0:420          'samp' ( temp highp 4-component vector of float)
+0:420          textureFetch ( global highp 4-component vector of float)
+0:420            'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:420            'coord' ( temp highp int)
+0:421      move second child to first child ( temp highp float)
+0:421        direct index ( temp highp float)
+0:421          'v' ( temp highp 3-component vector of float)
+0:421          Constant:
+0:421            0 (const int)
+0:421        direct index ( temp highp float)
+0:421          'samp' ( temp highp 4-component vector of float)
+0:421          Constant:
+0:421            1 (const int)
+0:422      move second child to first child ( temp highp float)
+0:422        direct index ( temp highp float)
+0:422          'v' ( temp highp 3-component vector of float)
+0:422          Constant:
+0:422            1 (const int)
+0:422        direct index ( temp highp float)
+0:422          'samp' ( temp highp 4-component vector of float)
+0:422          Constant:
+0:422            2 (const int)
+0:423      move second child to first child ( temp highp float)
+0:423        direct index ( temp highp float)
+0:423          'v' ( temp highp 3-component vector of float)
+0:423          Constant:
+0:423            2 (const int)
+0:423        direct index ( temp highp float)
+0:423          'samp' ( temp highp 4-component vector of float)
+0:423          Constant:
+0:423            3 (const int)
+0:424      Branch: Return with expression
+0:424        'v' ( temp highp 3-component vector of float)
+0:426  Function Definition: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float)
+0:426    Function Parameters: 
+0:426      'index' ( in highp int)
+0:427    Sequence
+0:427      subtract second child into first child ( temp highp int)
+0:427        'index' ( in highp int)
+0:427        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:427          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:427          Constant:
+0:427            0 (const uint)
+0:428      Sequence
+0:428        move second child to first child ( temp highp 3-component vector of float)
+0:428          'v' ( temp highp 3-component vector of float)
+0:428          Constant:
+0:428            0.000000
+0:428            0.000000
+0:428            0.000000
+0:429      Sequence
+0:429        move second child to first child ( temp highp 3X3 matrix of float)
+0:429          'm' ( temp highp 3X3 matrix of float)
+0:429          Constant:
+0:429            1.000000
+0:429            0.000000
+0:429            0.000000
+0:429            0.000000
+0:429            1.000000
+0:429            0.000000
+0:429            0.000000
+0:429            0.000000
+0:429            1.000000
+0:433      Branch: Return with expression
+0:433        'm' ( temp highp 3X3 matrix of float)
+0:435  Function Definition: TDInstanceScale(i1; ( global highp 3-component vector of float)
+0:435    Function Parameters: 
+0:435      'index' ( in highp int)
+0:436    Sequence
+0:436      subtract second child into first child ( temp highp int)
+0:436        'index' ( in highp int)
+0:436        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:436          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:436          Constant:
+0:436            0 (const uint)
+0:437      Sequence
+0:437        move second child to first child ( temp highp 3-component vector of float)
+0:437          'v' ( temp highp 3-component vector of float)
+0:437          Constant:
+0:437            1.000000
+0:437            1.000000
+0:437            1.000000
+0:438      Branch: Return with expression
+0:438        'v' ( temp highp 3-component vector of float)
+0:440  Function Definition: TDInstancePivot(i1; ( global highp 3-component vector of float)
+0:440    Function Parameters: 
+0:440      'index' ( in highp int)
+0:441    Sequence
+0:441      subtract second child into first child ( temp highp int)
+0:441        'index' ( in highp int)
+0:441        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:441          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:441          Constant:
+0:441            0 (const uint)
+0:442      Sequence
+0:442        move second child to first child ( temp highp 3-component vector of float)
+0:442          'v' ( temp highp 3-component vector of float)
+0:442          Constant:
+0:442            0.000000
+0:442            0.000000
+0:442            0.000000
+0:443      Branch: Return with expression
+0:443        'v' ( temp highp 3-component vector of float)
+0:445  Function Definition: TDInstanceRotTo(i1; ( global highp 3-component vector of float)
+0:445    Function Parameters: 
+0:445      'index' ( in highp int)
+0:446    Sequence
+0:446      subtract second child into first child ( temp highp int)
+0:446        'index' ( in highp int)
+0:446        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:446          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:446          Constant:
+0:446            0 (const uint)
+0:447      Sequence
+0:447        move second child to first child ( temp highp 3-component vector of float)
+0:447          'v' ( temp highp 3-component vector of float)
+0:447          Constant:
+0:447            0.000000
+0:447            0.000000
+0:447            1.000000
+0:448      Branch: Return with expression
+0:448        'v' ( temp highp 3-component vector of float)
+0:450  Function Definition: TDInstanceRotUp(i1; ( global highp 3-component vector of float)
+0:450    Function Parameters: 
+0:450      'index' ( in highp int)
+0:451    Sequence
+0:451      subtract second child into first child ( temp highp int)
+0:451        'index' ( in highp int)
+0:451        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:451          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:451          Constant:
+0:451            0 (const uint)
+0:452      Sequence
+0:452        move second child to first child ( temp highp 3-component vector of float)
+0:452          'v' ( temp highp 3-component vector of float)
+0:452          Constant:
+0:452            0.000000
+0:452            1.000000
+0:452            0.000000
+0:453      Branch: Return with expression
+0:453        'v' ( temp highp 3-component vector of float)
+0:455  Function Definition: TDInstanceMat(i1; ( global highp 4X4 matrix of float)
+0:455    Function Parameters: 
+0:455      'id' ( in highp int)
+0:456    Sequence
+0:456      Sequence
+0:456        move second child to first child ( temp bool)
+0:456          'instanceActive' ( temp bool)
+0:456          Constant:
+0:456            true (const bool)
+0:457      Sequence
+0:457        move second child to first child ( temp highp 3-component vector of float)
+0:457          't' ( temp highp 3-component vector of float)
+0:457          Function Call: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float)
+0:457            'id' ( in highp int)
+0:457            'instanceActive' ( temp bool)
+0:458      Test condition and select ( temp void)
+0:458        Condition
+0:458        Negate conditional ( temp bool)
+0:458          'instanceActive' ( temp bool)
+0:458        true case
+0:460        Sequence
+0:460          Branch: Return with expression
+0:460            Constant:
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:460              0.000000
+0:462      Sequence
+0:462        move second child to first child ( temp highp 4X4 matrix of float)
+0:462          'm' ( temp highp 4X4 matrix of float)
+0:462          Constant:
+0:462            1.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            1.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            1.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            0.000000
+0:462            1.000000
+0:464      Sequence
+0:464        Sequence
+0:464          move second child to first child ( temp highp 3-component vector of float)
+0:464            'tt' ( temp highp 3-component vector of float)
+0:464            't' ( temp highp 3-component vector of float)
+0:465        add second child into first child ( temp highp float)
+0:465          direct index ( temp highp float)
+0:465            direct index ( temp highp 4-component vector of float)
+0:465              'm' ( temp highp 4X4 matrix of float)
+0:465              Constant:
+0:465                3 (const int)
+0:465            Constant:
+0:465              0 (const int)
+0:465          component-wise multiply ( temp highp float)
+0:465            direct index ( temp highp float)
+0:465              direct index ( temp highp 4-component vector of float)
+0:465                'm' ( temp highp 4X4 matrix of float)
+0:465                Constant:
+0:465                  0 (const int)
+0:465              Constant:
+0:465                0 (const int)
+0:465            direct index ( temp highp float)
+0:465              'tt' ( temp highp 3-component vector of float)
+0:465              Constant:
+0:465                0 (const int)
+0:466        add second child into first child ( temp highp float)
+0:466          direct index ( temp highp float)
+0:466            direct index ( temp highp 4-component vector of float)
+0:466              'm' ( temp highp 4X4 matrix of float)
+0:466              Constant:
+0:466                3 (const int)
+0:466            Constant:
+0:466              1 (const int)
+0:466          component-wise multiply ( temp highp float)
+0:466            direct index ( temp highp float)
+0:466              direct index ( temp highp 4-component vector of float)
+0:466                'm' ( temp highp 4X4 matrix of float)
+0:466                Constant:
+0:466                  0 (const int)
+0:466              Constant:
+0:466                1 (const int)
+0:466            direct index ( temp highp float)
+0:466              'tt' ( temp highp 3-component vector of float)
+0:466              Constant:
+0:466                0 (const int)
+0:467        add second child into first child ( temp highp float)
+0:467          direct index ( temp highp float)
+0:467            direct index ( temp highp 4-component vector of float)
+0:467              'm' ( temp highp 4X4 matrix of float)
+0:467              Constant:
+0:467                3 (const int)
+0:467            Constant:
+0:467              2 (const int)
+0:467          component-wise multiply ( temp highp float)
+0:467            direct index ( temp highp float)
+0:467              direct index ( temp highp 4-component vector of float)
+0:467                'm' ( temp highp 4X4 matrix of float)
+0:467                Constant:
+0:467                  0 (const int)
+0:467              Constant:
+0:467                2 (const int)
+0:467            direct index ( temp highp float)
+0:467              'tt' ( temp highp 3-component vector of float)
+0:467              Constant:
+0:467                0 (const int)
+0:468        add second child into first child ( temp highp float)
+0:468          direct index ( temp highp float)
+0:468            direct index ( temp highp 4-component vector of float)
+0:468              'm' ( temp highp 4X4 matrix of float)
+0:468              Constant:
+0:468                3 (const int)
+0:468            Constant:
+0:468              3 (const int)
+0:468          component-wise multiply ( temp highp float)
+0:468            direct index ( temp highp float)
+0:468              direct index ( temp highp 4-component vector of float)
+0:468                'm' ( temp highp 4X4 matrix of float)
+0:468                Constant:
+0:468                  0 (const int)
+0:468              Constant:
+0:468                3 (const int)
+0:468            direct index ( temp highp float)
+0:468              'tt' ( temp highp 3-component vector of float)
+0:468              Constant:
+0:468                0 (const int)
+0:469        add second child into first child ( temp highp float)
+0:469          direct index ( temp highp float)
+0:469            direct index ( temp highp 4-component vector of float)
+0:469              'm' ( temp highp 4X4 matrix of float)
+0:469              Constant:
+0:469                3 (const int)
+0:469            Constant:
+0:469              0 (const int)
+0:469          component-wise multiply ( temp highp float)
+0:469            direct index ( temp highp float)
+0:469              direct index ( temp highp 4-component vector of float)
+0:469                'm' ( temp highp 4X4 matrix of float)
+0:469                Constant:
+0:469                  1 (const int)
+0:469              Constant:
+0:469                0 (const int)
+0:469            direct index ( temp highp float)
+0:469              'tt' ( temp highp 3-component vector of float)
+0:469              Constant:
+0:469                1 (const int)
+0:470        add second child into first child ( temp highp float)
+0:470          direct index ( temp highp float)
+0:470            direct index ( temp highp 4-component vector of float)
+0:470              'm' ( temp highp 4X4 matrix of float)
+0:470              Constant:
+0:470                3 (const int)
+0:470            Constant:
+0:470              1 (const int)
+0:470          component-wise multiply ( temp highp float)
+0:470            direct index ( temp highp float)
+0:470              direct index ( temp highp 4-component vector of float)
+0:470                'm' ( temp highp 4X4 matrix of float)
+0:470                Constant:
+0:470                  1 (const int)
+0:470              Constant:
+0:470                1 (const int)
+0:470            direct index ( temp highp float)
+0:470              'tt' ( temp highp 3-component vector of float)
+0:470              Constant:
+0:470                1 (const int)
+0:471        add second child into first child ( temp highp float)
+0:471          direct index ( temp highp float)
+0:471            direct index ( temp highp 4-component vector of float)
+0:471              'm' ( temp highp 4X4 matrix of float)
+0:471              Constant:
+0:471                3 (const int)
+0:471            Constant:
+0:471              2 (const int)
+0:471          component-wise multiply ( temp highp float)
+0:471            direct index ( temp highp float)
+0:471              direct index ( temp highp 4-component vector of float)
+0:471                'm' ( temp highp 4X4 matrix of float)
+0:471                Constant:
+0:471                  1 (const int)
+0:471              Constant:
+0:471                2 (const int)
+0:471            direct index ( temp highp float)
+0:471              'tt' ( temp highp 3-component vector of float)
+0:471              Constant:
+0:471                1 (const int)
+0:472        add second child into first child ( temp highp float)
+0:472          direct index ( temp highp float)
+0:472            direct index ( temp highp 4-component vector of float)
+0:472              'm' ( temp highp 4X4 matrix of float)
+0:472              Constant:
+0:472                3 (const int)
+0:472            Constant:
+0:472              3 (const int)
+0:472          component-wise multiply ( temp highp float)
+0:472            direct index ( temp highp float)
+0:472              direct index ( temp highp 4-component vector of float)
+0:472                'm' ( temp highp 4X4 matrix of float)
+0:472                Constant:
+0:472                  1 (const int)
+0:472              Constant:
+0:472                3 (const int)
+0:472            direct index ( temp highp float)
+0:472              'tt' ( temp highp 3-component vector of float)
+0:472              Constant:
+0:472                1 (const int)
+0:473        add second child into first child ( temp highp float)
+0:473          direct index ( temp highp float)
+0:473            direct index ( temp highp 4-component vector of float)
+0:473              'm' ( temp highp 4X4 matrix of float)
+0:473              Constant:
+0:473                3 (const int)
+0:473            Constant:
+0:473              0 (const int)
+0:473          component-wise multiply ( temp highp float)
+0:473            direct index ( temp highp float)
+0:473              direct index ( temp highp 4-component vector of float)
+0:473                'm' ( temp highp 4X4 matrix of float)
+0:473                Constant:
+0:473                  2 (const int)
+0:473              Constant:
+0:473                0 (const int)
+0:473            direct index ( temp highp float)
+0:473              'tt' ( temp highp 3-component vector of float)
+0:473              Constant:
+0:473                2 (const int)
+0:474        add second child into first child ( temp highp float)
+0:474          direct index ( temp highp float)
+0:474            direct index ( temp highp 4-component vector of float)
+0:474              'm' ( temp highp 4X4 matrix of float)
+0:474              Constant:
+0:474                3 (const int)
+0:474            Constant:
+0:474              1 (const int)
+0:474          component-wise multiply ( temp highp float)
+0:474            direct index ( temp highp float)
+0:474              direct index ( temp highp 4-component vector of float)
+0:474                'm' ( temp highp 4X4 matrix of float)
+0:474                Constant:
+0:474                  2 (const int)
+0:474              Constant:
+0:474                1 (const int)
+0:474            direct index ( temp highp float)
+0:474              'tt' ( temp highp 3-component vector of float)
+0:474              Constant:
+0:474                2 (const int)
+0:475        add second child into first child ( temp highp float)
+0:475          direct index ( temp highp float)
+0:475            direct index ( temp highp 4-component vector of float)
+0:475              'm' ( temp highp 4X4 matrix of float)
+0:475              Constant:
+0:475                3 (const int)
+0:475            Constant:
+0:475              2 (const int)
+0:475          component-wise multiply ( temp highp float)
+0:475            direct index ( temp highp float)
+0:475              direct index ( temp highp 4-component vector of float)
+0:475                'm' ( temp highp 4X4 matrix of float)
+0:475                Constant:
+0:475                  2 (const int)
+0:475              Constant:
+0:475                2 (const int)
+0:475            direct index ( temp highp float)
+0:475              'tt' ( temp highp 3-component vector of float)
+0:475              Constant:
+0:475                2 (const int)
+0:476        add second child into first child ( temp highp float)
+0:476          direct index ( temp highp float)
+0:476            direct index ( temp highp 4-component vector of float)
+0:476              'm' ( temp highp 4X4 matrix of float)
+0:476              Constant:
+0:476                3 (const int)
+0:476            Constant:
+0:476              3 (const int)
+0:476          component-wise multiply ( temp highp float)
+0:476            direct index ( temp highp float)
+0:476              direct index ( temp highp 4-component vector of float)
+0:476                'm' ( temp highp 4X4 matrix of float)
+0:476                Constant:
+0:476                  2 (const int)
+0:476              Constant:
+0:476                3 (const int)
+0:476            direct index ( temp highp float)
+0:476              'tt' ( temp highp 3-component vector of float)
+0:476              Constant:
+0:476                2 (const int)
+0:478      Branch: Return with expression
+0:478        'm' ( temp highp 4X4 matrix of float)
+0:480  Function Definition: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:480    Function Parameters: 
+0:480      'id' ( in highp int)
+0:481    Sequence
+0:481      Sequence
+0:481        move second child to first child ( temp highp 3X3 matrix of float)
+0:481          'm' ( temp highp 3X3 matrix of float)
+0:481          Constant:
+0:481            1.000000
+0:481            0.000000
+0:481            0.000000
+0:481            0.000000
+0:481            1.000000
+0:481            0.000000
+0:481            0.000000
+0:481            0.000000
+0:481            1.000000
+0:482      Branch: Return with expression
+0:482        'm' ( temp highp 3X3 matrix of float)
+0:484  Function Definition: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float)
+0:484    Function Parameters: 
+0:484      'id' ( in highp int)
+0:485    Sequence
+0:485      Sequence
+0:485        move second child to first child ( temp highp 3X3 matrix of float)
+0:485          'm' ( temp highp 3X3 matrix of float)
+0:485          Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float)
+0:485            'id' ( in highp int)
+0:486      Branch: Return with expression
+0:486        'm' ( temp highp 3X3 matrix of float)
+0:488  Function Definition: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float)
+0:488    Function Parameters: 
+0:488      'index' ( in highp int)
+0:488      'curColor' ( in highp 4-component vector of float)
+0:489    Sequence
+0:489      subtract second child into first child ( temp highp int)
+0:489        'index' ( in highp int)
+0:489        uTDInstanceIDOffset: direct index for structure ( uniform highp int)
+0:489          'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:489          Constant:
+0:489            0 (const uint)
+0:491      Sequence
+0:491        move second child to first child ( temp highp int)
+0:491          'coord' ( temp highp int)
+0:491          'index' ( in highp int)
+0:492      Sequence
+0:492        move second child to first child ( temp highp 4-component vector of float)
+0:492          'samp' ( temp highp 4-component vector of float)
+0:492          textureFetch ( global highp 4-component vector of float)
+0:492            'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer)
+0:492            'coord' ( temp highp int)
+0:493      move second child to first child ( temp highp float)
+0:493        direct index ( temp highp float)
+0:493          'v' ( temp highp 4-component vector of float)
+0:493          Constant:
+0:493            0 (const int)
+0:493        direct index ( temp highp float)
+0:493          'samp' ( temp highp 4-component vector of float)
+0:493          Constant:
+0:493            0 (const int)
+0:494      move second child to first child ( temp highp float)
+0:494        direct index ( temp highp float)
+0:494          'v' ( temp highp 4-component vector of float)
+0:494          Constant:
+0:494            1 (const int)
+0:494        direct index ( temp highp float)
+0:494          'samp' ( temp highp 4-component vector of float)
+0:494          Constant:
+0:494            1 (const int)
+0:495      move second child to first child ( temp highp float)
+0:495        direct index ( temp highp float)
+0:495          'v' ( temp highp 4-component vector of float)
+0:495          Constant:
+0:495            2 (const int)
+0:495        direct index ( temp highp float)
+0:495          'samp' ( temp highp 4-component vector of float)
+0:495          Constant:
+0:495            2 (const int)
+0:496      move second child to first child ( temp highp float)
+0:496        direct index ( temp highp float)
+0:496          'v' ( temp highp 4-component vector of float)
+0:496          Constant:
+0:496            3 (const int)
+0:496        Constant:
+0:496          1.000000
+0:497      move second child to first child ( temp highp float)
+0:497        direct index ( temp highp float)
+0:497          'curColor' ( in highp 4-component vector of float)
+0:497          Constant:
+0:497            0 (const int)
+0:497        direct index ( temp highp float)
+0:497          'v' ( temp highp 4-component vector of float)
+0:497          Constant:
+0:497            0 (const int)
+0:499      move second child to first child ( temp highp float)
+0:499        direct index ( temp highp float)
+0:499          'curColor' ( in highp 4-component vector of float)
+0:499          Constant:
+0:499            1 (const int)
+0:499        direct index ( temp highp float)
+0:499          'v' ( temp highp 4-component vector of float)
+0:499          Constant:
+0:499            1 (const int)
+0:501      move second child to first child ( temp highp float)
+0:501        direct index ( temp highp float)
+0:501          'curColor' ( in highp 4-component vector of float)
+0:501          Constant:
+0:501            2 (const int)
+0:501        direct index ( temp highp float)
+0:501          'v' ( temp highp 4-component vector of float)
+0:501          Constant:
+0:501            2 (const int)
+0:503      Branch: Return with expression
+0:503        'curColor' ( in highp 4-component vector of float)
+0:2  Function Definition: TDOutputSwizzle(vf4; ( global highp 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'c' ( in highp 4-component vector of float)
+0:4    Sequence
+0:4      Branch: Return with expression
+0:4        vector swizzle ( temp highp 4-component vector of float)
+0:4          'c' ( in highp 4-component vector of float)
+0:4          Sequence
+0:4            Constant:
+0:4              0 (const int)
+0:4            Constant:
+0:4              1 (const int)
+0:4            Constant:
+0:4              2 (const int)
+0:4            Constant:
+0:4              3 (const int)
+0:6  Function Definition: TDOutputSwizzle(vu4; ( global highp 4-component vector of uint)
+0:6    Function Parameters: 
+0:6      'c' ( in highp 4-component vector of uint)
+0:8    Sequence
+0:8      Branch: Return with expression
+0:8        vector swizzle ( temp highp 4-component vector of uint)
+0:8          'c' ( in highp 4-component vector of uint)
+0:8          Sequence
+0:8            Constant:
+0:8              0 (const int)
+0:8            Constant:
+0:8              1 (const int)
+0:8            Constant:
+0:8              2 (const int)
+0:8            Constant:
+0:8              3 (const int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset,  uniform highp int uTDNumInstances,  uniform highp float uTDAlphaTestVal,  uniform highp 3-component vector of float uConstant,  uniform highp float uShadowStrength,  uniform highp 3-component vector of float uShadowColor,  uniform highp 4-component vector of float uDiffuseColor,  uniform highp 4-component vector of float uAmbientColor})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor,  global highp int renderTOPCameraIndex} uTDCamInfos})
+0:?     'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float viewport,  global highp 4-component vector of float viewportRes,  global highp 4-component vector of float fog,  global highp 4-component vector of float fogColor} uTDGeneral})
+0:?     'sColorMap' ( uniform highp sampler2DArray)
+0:?     'iVert' ( in block{ in highp 4-component vector of float color,  in highp 3-component vector of float worldSpacePos,  in highp 3-component vector of float texCoord0,  flat in highp int cameraIndex,  flat in highp int instance})
+0:?     'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float)
+0:?     'sTDNoiseMap' ( uniform highp sampler2D)
+0:?     'sTDSineLookup' ( uniform highp sampler1D)
+0:?     'sTDWhite2D' ( uniform highp sampler2D)
+0:?     'sTDWhite3D' ( uniform highp sampler3D)
+0:?     'sTDWhite2DArray' ( uniform highp sampler2DArray)
+0:?     'sTDWhiteCube' ( uniform highp samplerCube)
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position,  global highp 3-component vector of float direction,  global highp 3-component vector of float diffuse,  global highp 4-component vector of float nearFar,  global highp 4-component vector of float lightSize,  global highp 4-component vector of float misc,  global highp 4-component vector of float coneLookupScaleBias,  global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix,  global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights})
+0:?     'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs})
+0:?     'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer)
+0:?     'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer)
+0:?     'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 939
+
+                              Capability Shader
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 207 216 226 238 256 297 905 906
+                              Source GLSL 460
+                              Name 4  "main"
+                              Name 20  "iTDCamToProj(vf4;vf3;i1;b1;"
+                              Name 16  "v"
+                              Name 17  "uv"
+                              Name 18  "cameraIndex"
+                              Name 19  "applyPickMod"
+                              Name 26  "iTDWorldToProj(vf4;vf3;i1;b1;"
+                              Name 22  "v"
+                              Name 23  "uv"
+                              Name 24  "cameraIndex"
+                              Name 25  "applyPickMod"
+                              Name 29  "TDInstanceID("
+                              Name 31  "TDCameraIndex("
+                              Name 34  "TDUVUnwrapCoord("
+                              Name 36  "TDPickID("
+                              Name 40  "iTDConvertPickId(i1;"
+                              Name 39  "id"
+                              Name 42  "TDWritePickingValues("
+                              Name 47  "TDWorldToProj(vf4;vf3;"
+                              Name 45  "v"
+                              Name 46  "uv"
+                              Name 52  "TDWorldToProj(vf3;vf3;"
+                              Name 50  "v"
+                              Name 51  "uv"
+                              Name 56  "TDWorldToProj(vf4;"
+                              Name 55  "v"
+                              Name 60  "TDWorldToProj(vf3;"
+                              Name 59  "v"
+                              Name 63  "TDPointColor("
+                              Name 68  "TDInstanceTexCoord(i1;vf3;"
+                              Name 66  "index"
+                              Name 67  "t"
+                              Name 72  "TDInstanceActive(i1;"
+                              Name 71  "index"
+                              Name 77  "iTDInstanceTranslate(i1;b1;"
+                              Name 75  "index"
+                              Name 76  "instanceActive"
+                              Name 81  "TDInstanceTranslate(i1;"
+                              Name 80  "index"
+                              Name 86  "TDInstanceRotateMat(i1;"
+                              Name 85  "index"
+                              Name 89  "TDInstanceScale(i1;"
+                              Name 88  "index"
+                              Name 92  "TDInstancePivot(i1;"
+                              Name 91  "index"
+                              Name 95  "TDInstanceRotTo(i1;"
+                              Name 94  "index"
+                              Name 98  "TDInstanceRotUp(i1;"
+                              Name 97  "index"
+                              Name 103  "TDInstanceMat(i1;"
+                              Name 102  "id"
+                              Name 106  "TDInstanceMat3(i1;"
+                              Name 105  "id"
+                              Name 109  "TDInstanceMat3ForNorm(i1;"
+                              Name 108  "id"
+                              Name 114  "TDInstanceColor(i1;vf4;"
+                              Name 112  "index"
+                              Name 113  "curColor"
+                              Name 118  "TDInstanceDeform(i1;vf4;"
+                              Name 116  "id"
+                              Name 117  "pos"
+                              Name 122  "TDInstanceDeformVec(i1;vf3;"
+                              Name 120  "id"
+                              Name 121  "vec"
+                              Name 126  "TDInstanceDeformNorm(i1;vf3;"
+                              Name 124  "id"
+                              Name 125  "vec"
+                              Name 129  "TDInstanceDeform(vf4;"
+                              Name 128  "pos"
+                              Name 133  "TDInstanceDeformVec(vf3;"
+                              Name 132  "vec"
+                              Name 136  "TDInstanceDeformNorm(vf3;"
+                              Name 135  "vec"
+                              Name 139  "TDInstanceActive("
+                              Name 141  "TDInstanceTranslate("
+                              Name 144  "TDInstanceRotateMat("
+                              Name 146  "TDInstanceScale("
+                              Name 149  "TDInstanceMat("
+                              Name 151  "TDInstanceMat3("
+                              Name 154  "TDInstanceTexCoord(vf3;"
+                              Name 153  "t"
+                              Name 157  "TDInstanceColor(vf4;"
+                              Name 156  "curColor"
+                              Name 160  "TDSkinnedDeform(vf4;"
+                              Name 159  "pos"
+                              Name 163  "TDSkinnedDeformVec(vf3;"
+                              Name 162  "vec"
+                              Name 169  "TDFastDeformTangent(vf3;vf4;vf3;"
+                              Name 166  "oldNorm"
+                              Name 167  "oldTangent"
+                              Name 168  "deformedNorm"
+                              Name 172  "TDBoneMat(i1;"
+                              Name 171  "index"
+                              Name 175  "TDDeform(vf4;"
+                              Name 174  "pos"
+                              Name 180  "TDDeform(i1;vf3;"
+                              Name 178  "instanceID"
+                              Name 179  "p"
+                              Name 183  "TDDeform(vf3;"
+                              Name 182  "pos"
+                              Name 187  "TDDeformVec(i1;vf3;"
+                              Name 185  "instanceID"
+                              Name 186  "vec"
+                              Name 190  "TDDeformVec(vf3;"
+                              Name 189  "vec"
+                              Name 194  "TDDeformNorm(i1;vf3;"
+                              Name 192  "instanceID"
+                              Name 193  "vec"
+                              Name 197  "TDDeformNorm(vf3;"
+                              Name 196  "vec"
+                              Name 200  "TDSkinnedDeformNorm(vf3;"
+                              Name 199  "vec"
+                              Name 202  "texcoord"
+                              Name 207  "uv"
+                              Name 209  "param"
+                              Name 214  "Vertex"
+                              MemberName 214(Vertex) 0  "color"
+                              MemberName 214(Vertex) 1  "worldSpacePos"
+                              MemberName 214(Vertex) 2  "texCoord0"
+                              MemberName 214(Vertex) 3  "cameraIndex"
+                              MemberName 214(Vertex) 4  "instance"
+                              Name 216  "oVert"
+                              Name 225  "worldSpacePos"
+                              Name 226  "P"
+                              Name 227  "param"
+                              Name 230  "uvUnwrapCoord"
+                              Name 232  "param"
+                              Name 236  "gl_PerVertex"
+                              MemberName 236(gl_PerVertex) 0  "gl_Position"
+                              MemberName 236(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 236(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 236(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 238  ""
+                              Name 239  "param"
+                              Name 241  "param"
+                              Name 246  "cameraIndex"
+                              Name 256  "Cd"
+                              Name 257  "param"
+                              Name 269  "TDMatrix"
+                              MemberName 269(TDMatrix) 0  "world"
+                              MemberName 269(TDMatrix) 1  "worldInverse"
+                              MemberName 269(TDMatrix) 2  "worldCam"
+                              MemberName 269(TDMatrix) 3  "worldCamInverse"
+                              MemberName 269(TDMatrix) 4  "cam"
+                              MemberName 269(TDMatrix) 5  "camInverse"
+                              MemberName 269(TDMatrix) 6  "camProj"
+                              MemberName 269(TDMatrix) 7  "camProjInverse"
+                              MemberName 269(TDMatrix) 8  "proj"
+                              MemberName 269(TDMatrix) 9  "projInverse"
+                              MemberName 269(TDMatrix) 10  "worldCamProj"
+                              MemberName 269(TDMatrix) 11  "worldCamProjInverse"
+                              MemberName 269(TDMatrix) 12  "quadReproject"
+                              MemberName 269(TDMatrix) 13  "worldForNormals"
+                              MemberName 269(TDMatrix) 14  "camForNormals"
+                              MemberName 269(TDMatrix) 15  "worldCamForNormals"
+                              Name 271  "TDMatricesBlock"
+                              MemberName 271(TDMatricesBlock) 0  "uTDMats"
+                              Name 273  ""
+                              Name 297  "gl_InstanceIndex"
+                              Name 299  "gl_DefaultUniformBlock"
+                              MemberName 299(gl_DefaultUniformBlock) 0  "uTDInstanceIDOffset"
+                              MemberName 299(gl_DefaultUniformBlock) 1  "uTDNumInstances"
+                              MemberName 299(gl_DefaultUniformBlock) 2  "uTDAlphaTestVal"
+                              MemberName 299(gl_DefaultUniformBlock) 3  "uConstant"
+                              MemberName 299(gl_DefaultUniformBlock) 4  "uShadowStrength"
+                              MemberName 299(gl_DefaultUniformBlock) 5  "uShadowColor"
+                              MemberName 299(gl_DefaultUniformBlock) 6  "uDiffuseColor"
+                              MemberName 299(gl_DefaultUniformBlock) 7  "uAmbientColor"
+                              Name 301  ""
+                              Name 325  "param"
+                              Name 327  "param"
+                              Name 329  "param"
+                              Name 330  "param"
+                              Name 340  "param"
+                              Name 341  "param"
+                              Name 347  "param"
+                              Name 349  "param"
+                              Name 358  "param"
+                              Name 365  "coord"
+                              Name 367  "samp"
+                              Name 371  "sTDInstanceTexCoord"
+                              Name 376  "v"
+                              Name 397  "coord"
+                              Name 399  "samp"
+                              Name 400  "sTDInstanceT"
+                              Name 405  "v"
+                              Name 412  "origIndex"
+                              Name 418  "coord"
+                              Name 420  "samp"
+                              Name 425  "v"
+                              Name 446  "coord"
+                              Name 448  "samp"
+                              Name 453  "v"
+                              Name 470  "v"
+                              Name 472  "m"
+                              Name 484  "v"
+                              Name 493  "v"
+                              Name 501  "v"
+                              Name 509  "v"
+                              Name 513  "instanceActive"
+                              Name 514  "t"
+                              Name 515  "param"
+                              Name 517  "param"
+                              Name 528  "m"
+                              Name 534  "tt"
+                              Name 647  "m"
+                              Name 651  "m"
+                              Name 652  "param"
+                              Name 662  "coord"
+                              Name 664  "samp"
+                              Name 665  "sTDInstanceColor"
+                              Name 670  "v"
+                              Name 693  "param"
+                              Name 705  "m"
+                              Name 706  "param"
+                              Name 725  "m"
+                              Name 726  "param"
+                              Name 745  "param"
+                              Name 746  "param"
+                              Name 752  "param"
+                              Name 753  "param"
+                              Name 759  "param"
+                              Name 760  "param"
+                              Name 766  "param"
+                              Name 771  "param"
+                              Name 776  "param"
+                              Name 781  "param"
+                              Name 786  "param"
+                              Name 791  "param"
+                              Name 796  "param"
+                              Name 797  "param"
+                              Name 803  "param"
+                              Name 804  "param"
+                              Name 821  "param"
+                              Name 824  "param"
+                              Name 830  "pos"
+                              Name 836  "param"
+                              Name 839  "param"
+                              Name 841  "param"
+                              Name 848  "param"
+                              Name 849  "param"
+                              Name 854  "param"
+                              Name 857  "param"
+                              Name 859  "param"
+                              Name 866  "param"
+                              Name 867  "param"
+                              Name 872  "param"
+                              Name 875  "param"
+                              Name 877  "param"
+                              Name 884  "param"
+                              Name 885  "param"
+                              Name 890  "param"
+                              Name 896  "TDCameraInfo"
+                              MemberName 896(TDCameraInfo) 0  "nearFar"
+                              MemberName 896(TDCameraInfo) 1  "fog"
+                              MemberName 896(TDCameraInfo) 2  "fogColor"
+                              MemberName 896(TDCameraInfo) 3  "renderTOPCameraIndex"
+                              Name 898  "TDCameraInfoBlock"
+                              MemberName 898(TDCameraInfoBlock) 0  "uTDCamInfos"
+                              Name 900  ""
+                              Name 901  "TDGeneral"
+                              MemberName 901(TDGeneral) 0  "ambientColor"
+                              MemberName 901(TDGeneral) 1  "nearFar"
+                              MemberName 901(TDGeneral) 2  "viewport"
+                              MemberName 901(TDGeneral) 3  "viewportRes"
+                              MemberName 901(TDGeneral) 4  "fog"
+                              MemberName 901(TDGeneral) 5  "fogColor"
+                              Name 902  "TDGeneralBlock"
+                              MemberName 902(TDGeneralBlock) 0  "uTDGeneral"
+                              Name 904  ""
+                              Name 905  "N"
+                              Name 906  "gl_VertexIndex"
+                              Name 907  "TDLight"
+                              MemberName 907(TDLight) 0  "position"
+                              MemberName 907(TDLight) 1  "direction"
+                              MemberName 907(TDLight) 2  "diffuse"
+                              MemberName 907(TDLight) 3  "nearFar"
+                              MemberName 907(TDLight) 4  "lightSize"
+                              MemberName 907(TDLight) 5  "misc"
+                              MemberName 907(TDLight) 6  "coneLookupScaleBias"
+                              MemberName 907(TDLight) 7  "attenScaleBiasRoll"
+                              MemberName 907(TDLight) 8  "shadowMapMatrix"
+                              MemberName 907(TDLight) 9  "shadowMapCamMatrix"
+                              MemberName 907(TDLight) 10  "shadowMapRes"
+                              MemberName 907(TDLight) 11  "projMapMatrix"
+                              Name 909  "TDLightBlock"
+                              MemberName 909(TDLightBlock) 0  "uTDLights"
+                              Name 911  ""
+                              Name 912  "TDEnvLight"
+                              MemberName 912(TDEnvLight) 0  "color"
+                              MemberName 912(TDEnvLight) 1  "rotate"
+                              Name 914  "TDEnvLightBlock"
+                              MemberName 914(TDEnvLightBlock) 0  "uTDEnvLights"
+                              Name 916  ""
+                              Name 919  "TDEnvLightBuffer"
+                              MemberName 919(TDEnvLightBuffer) 0  "shCoeffs"
+                              Name 922  "uTDEnvLightBuffers"
+                              Name 926  "mTD2DImageOutputs"
+                              Name 930  "mTD2DArrayImageOutputs"
+                              Name 934  "mTD3DImageOutputs"
+                              Name 938  "mTDCubeImageOutputs"
+                              Decorate 207(uv) Location 3
+                              MemberDecorate 214(Vertex) 3 Flat
+                              MemberDecorate 214(Vertex) 4 Flat
+                              Decorate 214(Vertex) Block
+                              Decorate 216(oVert) Location 0
+                              Decorate 226(P) Location 0
+                              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) 1 ColMajor
+                              MemberDecorate 269(TDMatrix) 1 Offset 64
+                              MemberDecorate 269(TDMatrix) 1 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 2 ColMajor
+                              MemberDecorate 269(TDMatrix) 2 Offset 128
+                              MemberDecorate 269(TDMatrix) 2 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 3 ColMajor
+                              MemberDecorate 269(TDMatrix) 3 Offset 192
+                              MemberDecorate 269(TDMatrix) 3 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 4 ColMajor
+                              MemberDecorate 269(TDMatrix) 4 Offset 256
+                              MemberDecorate 269(TDMatrix) 4 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 5 ColMajor
+                              MemberDecorate 269(TDMatrix) 5 Offset 320
+                              MemberDecorate 269(TDMatrix) 5 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 6 ColMajor
+                              MemberDecorate 269(TDMatrix) 6 Offset 384
+                              MemberDecorate 269(TDMatrix) 6 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 7 ColMajor
+                              MemberDecorate 269(TDMatrix) 7 Offset 448
+                              MemberDecorate 269(TDMatrix) 7 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 8 ColMajor
+                              MemberDecorate 269(TDMatrix) 8 Offset 512
+                              MemberDecorate 269(TDMatrix) 8 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 9 ColMajor
+                              MemberDecorate 269(TDMatrix) 9 Offset 576
+                              MemberDecorate 269(TDMatrix) 9 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 10 ColMajor
+                              MemberDecorate 269(TDMatrix) 10 Offset 640
+                              MemberDecorate 269(TDMatrix) 10 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 11 ColMajor
+                              MemberDecorate 269(TDMatrix) 11 Offset 704
+                              MemberDecorate 269(TDMatrix) 11 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 12 ColMajor
+                              MemberDecorate 269(TDMatrix) 12 Offset 768
+                              MemberDecorate 269(TDMatrix) 12 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 13 ColMajor
+                              MemberDecorate 269(TDMatrix) 13 Offset 832
+                              MemberDecorate 269(TDMatrix) 13 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 14 ColMajor
+                              MemberDecorate 269(TDMatrix) 14 Offset 880
+                              MemberDecorate 269(TDMatrix) 14 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 15 ColMajor
+                              MemberDecorate 269(TDMatrix) 15 Offset 928
+                              MemberDecorate 269(TDMatrix) 15 MatrixStride 16
+                              Decorate 270 ArrayStride 976
+                              MemberDecorate 271(TDMatricesBlock) 0 Offset 0
+                              Decorate 271(TDMatricesBlock) Block
+                              Decorate 273 DescriptorSet 0
+                              Decorate 273 Binding 1
+                              Decorate 297(gl_InstanceIndex) BuiltIn InstanceIndex
+                              MemberDecorate 299(gl_DefaultUniformBlock) 0 Offset 0
+                              MemberDecorate 299(gl_DefaultUniformBlock) 1 Offset 4
+                              MemberDecorate 299(gl_DefaultUniformBlock) 2 Offset 8
+                              MemberDecorate 299(gl_DefaultUniformBlock) 3 Offset 16
+                              MemberDecorate 299(gl_DefaultUniformBlock) 4 Offset 28
+                              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 371(sTDInstanceTexCoord) Binding 16
+                              Decorate 400(sTDInstanceT) DescriptorSet 0
+                              Decorate 400(sTDInstanceT) Binding 15
+                              Decorate 665(sTDInstanceColor) DescriptorSet 0
+                              Decorate 665(sTDInstanceColor) Binding 17
+                              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
+                              Decorate 900 Binding 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
+                              Decorate 904 Binding 0
+                              Decorate 905(N) Location 1
+                              Decorate 906(gl_VertexIndex) BuiltIn VertexIndex
+                              MemberDecorate 907(TDLight) 0 Offset 0
+                              MemberDecorate 907(TDLight) 1 Offset 16
+                              MemberDecorate 907(TDLight) 2 Offset 32
+                              MemberDecorate 907(TDLight) 3 Offset 48
+                              MemberDecorate 907(TDLight) 4 Offset 64
+                              MemberDecorate 907(TDLight) 5 Offset 80
+                              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) 9 ColMajor
+                              MemberDecorate 907(TDLight) 9 Offset 192
+                              MemberDecorate 907(TDLight) 9 MatrixStride 16
+                              MemberDecorate 907(TDLight) 10 Offset 256
+                              MemberDecorate 907(TDLight) 11 ColMajor
+                              MemberDecorate 907(TDLight) 11 Offset 272
+                              MemberDecorate 907(TDLight) 11 MatrixStride 16
+                              Decorate 908 ArrayStride 336
+                              MemberDecorate 909(TDLightBlock) 0 Offset 0
+                              Decorate 909(TDLightBlock) Block
+                              Decorate 911 DescriptorSet 0
+                              Decorate 911 Binding 0
+                              MemberDecorate 912(TDEnvLight) 0 Offset 0
+                              MemberDecorate 912(TDEnvLight) 1 ColMajor
+                              MemberDecorate 912(TDEnvLight) 1 Offset 16
+                              MemberDecorate 912(TDEnvLight) 1 MatrixStride 16
+                              Decorate 913 ArrayStride 64
+                              MemberDecorate 914(TDEnvLightBlock) 0 Offset 0
+                              Decorate 914(TDEnvLightBlock) Block
+                              Decorate 916 DescriptorSet 0
+                              Decorate 916 Binding 0
+                              Decorate 918 ArrayStride 16
+                              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) Binding 0
+                              Decorate 926(mTD2DImageOutputs) DescriptorSet 0
+                              Decorate 926(mTD2DImageOutputs) Binding 0
+                              Decorate 930(mTD2DArrayImageOutputs) DescriptorSet 0
+                              Decorate 930(mTD2DArrayImageOutputs) Binding 0
+                              Decorate 934(mTD3DImageOutputs) DescriptorSet 0
+                              Decorate 934(mTD3DImageOutputs) Binding 0
+                              Decorate 938(mTDCubeImageOutputs) DescriptorSet 0
+                              Decorate 938(mTDCubeImageOutputs) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeVector 6(float) 3
+              10:             TypePointer Function 9(fvec3)
+              11:             TypeInt 32 1
+              12:             TypePointer Function 11(int)
+              13:             TypeBool
+              14:             TypePointer Function 13(bool)
+              15:             TypeFunction 7(fvec4) 8(ptr) 10(ptr) 12(ptr) 14(ptr)
+              28:             TypeFunction 11(int)
+              33:             TypeFunction 9(fvec3)
+              38:             TypeFunction 6(float) 12(ptr)
+              44:             TypeFunction 7(fvec4) 8(ptr) 10(ptr)
+              49:             TypeFunction 7(fvec4) 10(ptr) 10(ptr)
+              54:             TypeFunction 7(fvec4) 8(ptr)
+              58:             TypeFunction 7(fvec4) 10(ptr)
+              62:             TypeFunction 7(fvec4)
+              65:             TypeFunction 9(fvec3) 12(ptr) 10(ptr)
+              70:             TypeFunction 13(bool) 12(ptr)
+              74:             TypeFunction 9(fvec3) 12(ptr) 14(ptr)
+              79:             TypeFunction 9(fvec3) 12(ptr)
+              83:             TypeMatrix 9(fvec3) 3
+              84:             TypeFunction 83 12(ptr)
+             100:             TypeMatrix 7(fvec4) 4
+             101:             TypeFunction 100 12(ptr)
+             111:             TypeFunction 7(fvec4) 12(ptr) 8(ptr)
+             131:             TypeFunction 9(fvec3) 10(ptr)
+             138:             TypeFunction 13(bool)
+             143:             TypeFunction 83
+             148:             TypeFunction 100
+             165:             TypeFunction 9(fvec3) 10(ptr) 8(ptr) 10(ptr)
+             177:             TypeFunction 7(fvec4) 12(ptr) 10(ptr)
+             203:             TypeInt 32 0
+             204:    203(int) Constant 8
+             205:             TypeArray 9(fvec3) 204
+             206:             TypePointer Input 205
+         207(uv):    206(ptr) Variable Input
+             208:     11(int) Constant 0
+             210:             TypePointer Input 9(fvec3)
+     214(Vertex):             TypeStruct 7(fvec4) 9(fvec3) 9(fvec3) 11(int) 11(int)
+             215:             TypePointer Output 214(Vertex)
+      216(oVert):    215(ptr) Variable Output
+             217:     11(int) Constant 2
+             219:             TypePointer Output 9(fvec3)
+             221:     11(int) Constant 4
+             223:             TypePointer Output 11(int)
+          226(P):    210(ptr) Variable Input
+             234:    203(int) Constant 1
+             235:             TypeArray 6(float) 234
+236(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 235 235
+             237:             TypePointer Output 236(gl_PerVertex)
+             238:    237(ptr) Variable Output
+             244:             TypePointer Output 7(fvec4)
+             248:     11(int) Constant 3
+             251:     11(int) Constant 1
+             255:             TypePointer Input 7(fvec4)
+         256(Cd):    255(ptr) Variable Input
+             265:    6(float) Constant 1073741824
+             266:    6(float) Constant 0
+             267:    7(fvec4) ConstantComposite 265 265 265 266
+   269(TDMatrix):             TypeStruct 100 100 100 100 100 100 100 100 100 100 100 100 100 83 83 83
+             270:             TypeArray 269(TDMatrix) 234
+271(TDMatricesBlock):             TypeStruct 270
+             272:             TypePointer Uniform 271(TDMatricesBlock)
+             273:    272(ptr) Variable Uniform
+             274:     11(int) Constant 8
+             275:             TypePointer Uniform 100
+             288:     11(int) Constant 6
+             296:             TypePointer Input 11(int)
+297(gl_InstanceIndex):    296(ptr) Variable Input
+299(gl_DefaultUniformBlock):             TypeStruct 11(int) 11(int) 6(float) 9(fvec3) 6(float) 9(fvec3) 7(fvec4) 7(fvec4)
+             300:             TypePointer Uniform 299(gl_DefaultUniformBlock)
+             301:    300(ptr) Variable Uniform
+             302:             TypePointer Uniform 11(int)
+             316:     11(int) Constant 1073741824
+             324:    13(bool) ConstantTrue
+             335:    6(float) Constant 1065353216
+             346:    9(fvec3) ConstantComposite 266 266 266
+             368:             TypeImage 6(float) Buffer sampled format:Unknown
+             369:             TypeSampledImage 368
+             370:             TypePointer UniformConstant 369
+371(sTDInstanceTexCoord):    370(ptr) Variable UniformConstant
+             377:    203(int) Constant 0
+             378:             TypePointer Function 6(float)
+             387:    203(int) Constant 2
+400(sTDInstanceT):    370(ptr) Variable UniformConstant
+             432:    203(int) Constant 3
+             471:             TypePointer Function 83
+             473:    9(fvec3) ConstantComposite 335 266 266
+             474:    9(fvec3) ConstantComposite 266 335 266
+             475:    9(fvec3) ConstantComposite 266 266 335
+             476:          83 ConstantComposite 473 474 475
+             485:    9(fvec3) ConstantComposite 335 335 335
+             524:    7(fvec4) ConstantComposite 266 266 266 266
+             525:         100 ConstantComposite 524 524 524 524
+             527:             TypePointer Function 100
+             529:    7(fvec4) ConstantComposite 335 266 266 266
+             530:    7(fvec4) ConstantComposite 266 335 266 266
+             531:    7(fvec4) ConstantComposite 266 266 335 266
+             532:    7(fvec4) ConstantComposite 266 266 266 335
+             533:         100 ConstantComposite 529 530 531 532
+665(sTDInstanceColor):    370(ptr) Variable UniformConstant
+             730:     11(int) Constant 13
+             731:             TypePointer Uniform 83
+896(TDCameraInfo):             TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 11(int)
+             897:             TypeArray 896(TDCameraInfo) 234
+898(TDCameraInfoBlock):             TypeStruct 897
+             899:             TypePointer Uniform 898(TDCameraInfoBlock)
+             900:    899(ptr) Variable Uniform
+  901(TDGeneral):             TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4)
+902(TDGeneralBlock):             TypeStruct 901(TDGeneral)
+             903:             TypePointer Uniform 902(TDGeneralBlock)
+             904:    903(ptr) Variable Uniform
+          905(N):    210(ptr) Variable Input
+906(gl_VertexIndex):    296(ptr) Variable Input
+    907(TDLight):             TypeStruct 7(fvec4) 9(fvec3) 9(fvec3) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 100 100 7(fvec4) 100
+             908:             TypeArray 907(TDLight) 234
+909(TDLightBlock):             TypeStruct 908
+             910:             TypePointer Uniform 909(TDLightBlock)
+             911:    910(ptr) Variable Uniform
+ 912(TDEnvLight):             TypeStruct 9(fvec3) 83
+             913:             TypeArray 912(TDEnvLight) 234
+914(TDEnvLightBlock):             TypeStruct 913
+             915:             TypePointer Uniform 914(TDEnvLightBlock)
+             916:    915(ptr) Variable Uniform
+             917:    203(int) Constant 9
+             918:             TypeArray 9(fvec3) 917
+919(TDEnvLightBuffer):             TypeStruct 918
+             920:             TypeArray 919(TDEnvLightBuffer) 234
+             921:             TypePointer Uniform 920
+922(uTDEnvLightBuffers):    921(ptr) Variable Uniform
+             923:             TypeImage 6(float) 2D nonsampled format:Rgba8
+             924:             TypeArray 923 234
+             925:             TypePointer UniformConstant 924
+926(mTD2DImageOutputs):    925(ptr) Variable UniformConstant
+             927:             TypeImage 6(float) 2D array nonsampled format:Rgba8
+             928:             TypeArray 927 234
+             929:             TypePointer UniformConstant 928
+930(mTD2DArrayImageOutputs):    929(ptr) Variable UniformConstant
+             931:             TypeImage 6(float) 3D nonsampled format:Rgba8
+             932:             TypeArray 931 234
+             933:             TypePointer UniformConstant 932
+934(mTD3DImageOutputs):    933(ptr) Variable UniformConstant
+             935:             TypeImage 6(float) Cube nonsampled format:Rgba8
+             936:             TypeArray 935 234
+             937:             TypePointer UniformConstant 936
+938(mTDCubeImageOutputs):    937(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+   202(texcoord):     10(ptr) Variable Function
+      209(param):     10(ptr) Variable Function
+225(worldSpacePos):      8(ptr) Variable Function
+      227(param):     10(ptr) Variable Function
+230(uvUnwrapCoord):     10(ptr) Variable Function
+      232(param):     10(ptr) Variable Function
+      239(param):      8(ptr) Variable Function
+      241(param):     10(ptr) Variable Function
+246(cameraIndex):     12(ptr) Variable Function
+      257(param):      8(ptr) Variable Function
+             211:    210(ptr) AccessChain 207(uv) 208
+             212:    9(fvec3) Load 211
+                              Store 209(param) 212
+             213:    9(fvec3) FunctionCall 154(TDInstanceTexCoord(vf3;) 209(param)
+                              Store 202(texcoord) 213
+             218:    9(fvec3) Load 202(texcoord)
+             220:    219(ptr) AccessChain 216(oVert) 217
+                              Store 220 218
+             222:     11(int) FunctionCall 29(TDInstanceID()
+             224:    223(ptr) AccessChain 216(oVert) 221
+                              Store 224 222
+             228:    9(fvec3) Load 226(P)
+                              Store 227(param) 228
+             229:    7(fvec4) FunctionCall 183(TDDeform(vf3;) 227(param)
+                              Store 225(worldSpacePos) 229
+             231:    9(fvec3) FunctionCall 34(TDUVUnwrapCoord()
+                              Store 232(param) 231
+             233:    9(fvec3) FunctionCall 154(TDInstanceTexCoord(vf3;) 232(param)
+                              Store 230(uvUnwrapCoord) 233
+             240:    7(fvec4) Load 225(worldSpacePos)
+                              Store 239(param) 240
+             242:    9(fvec3) Load 230(uvUnwrapCoord)
+                              Store 241(param) 242
+             243:    7(fvec4) FunctionCall 47(TDWorldToProj(vf4;vf3;) 239(param) 241(param)
+             245:    244(ptr) AccessChain 238 208
+                              Store 245 243
+             247:     11(int) FunctionCall 31(TDCameraIndex()
+                              Store 246(cameraIndex) 247
+             249:     11(int) Load 246(cameraIndex)
+             250:    223(ptr) AccessChain 216(oVert) 248
+                              Store 250 249
+             252:    7(fvec4) Load 225(worldSpacePos)
+             253:    9(fvec3) VectorShuffle 252 252 0 1 2
+             254:    219(ptr) AccessChain 216(oVert) 251
+                              Store 254 253
+             258:    7(fvec4) Load 256(Cd)
+                              Store 257(param) 258
+             259:    7(fvec4) FunctionCall 157(TDInstanceColor(vf4;) 257(param)
+             260:    244(ptr) AccessChain 216(oVert) 208
+                              Store 260 259
+                              Return
+                              FunctionEnd
+20(iTDCamToProj(vf4;vf3;i1;b1;):    7(fvec4) Function None 15
+           16(v):      8(ptr) FunctionParameter
+          17(uv):     10(ptr) FunctionParameter
+ 18(cameraIndex):     12(ptr) FunctionParameter
+19(applyPickMod):     14(ptr) FunctionParameter
+              21:             Label
+             261:    13(bool) FunctionCall 139(TDInstanceActive()
+             262:    13(bool) LogicalNot 261
+                              SelectionMerge 264 None
+                              BranchConditional 262 263 264
+             263:               Label
+                                ReturnValue 267
+             264:             Label
+             276:    275(ptr) AccessChain 273 208 208 274
+             277:         100 Load 276
+             278:    7(fvec4) Load 16(v)
+             279:    7(fvec4) MatrixTimesVector 277 278
+                              Store 16(v) 279
+             280:    7(fvec4) Load 16(v)
+                              ReturnValue 280
+                              FunctionEnd
+26(iTDWorldToProj(vf4;vf3;i1;b1;):    7(fvec4) Function None 15
+           22(v):      8(ptr) FunctionParameter
+          23(uv):     10(ptr) FunctionParameter
+ 24(cameraIndex):     12(ptr) FunctionParameter
+25(applyPickMod):     14(ptr) FunctionParameter
+              27:             Label
+             283:    13(bool) FunctionCall 139(TDInstanceActive()
+             284:    13(bool) LogicalNot 283
+                              SelectionMerge 286 None
+                              BranchConditional 284 285 286
+             285:               Label
+                                ReturnValue 267
+             286:             Label
+             289:    275(ptr) AccessChain 273 208 208 288
+             290:         100 Load 289
+             291:    7(fvec4) Load 22(v)
+             292:    7(fvec4) MatrixTimesVector 290 291
+                              Store 22(v) 292
+             293:    7(fvec4) Load 22(v)
+                              ReturnValue 293
+                              FunctionEnd
+29(TDInstanceID():     11(int) Function None 28
+              30:             Label
+             298:     11(int) Load 297(gl_InstanceIndex)
+             303:    302(ptr) AccessChain 301 208
+             304:     11(int) Load 303
+             305:     11(int) IAdd 298 304
+                              ReturnValue 305
+                              FunctionEnd
+31(TDCameraIndex():     11(int) Function None 28
+              32:             Label
+                              ReturnValue 208
+                              FunctionEnd
+34(TDUVUnwrapCoord():    9(fvec3) Function None 33
+              35:             Label
+             310:    210(ptr) AccessChain 207(uv) 208
+             311:    9(fvec3) Load 310
+                              ReturnValue 311
+                              FunctionEnd
+   36(TDPickID():     11(int) Function None 28
+              37:             Label
+                              ReturnValue 208
+                              FunctionEnd
+40(iTDConvertPickId(i1;):    6(float) Function None 38
+          39(id):     12(ptr) FunctionParameter
+              41:             Label
+             317:     11(int) Load 39(id)
+             318:     11(int) BitwiseOr 317 316
+                              Store 39(id) 318
+             319:     11(int) Load 39(id)
+             320:    6(float) Bitcast 319
+                              ReturnValue 320
+                              FunctionEnd
+42(TDWritePickingValues():           2 Function None 3
+              43:             Label
+                              Return
+                              FunctionEnd
+47(TDWorldToProj(vf4;vf3;):    7(fvec4) Function None 44
+           45(v):      8(ptr) FunctionParameter
+          46(uv):     10(ptr) FunctionParameter
+              48:             Label
+      325(param):      8(ptr) Variable Function
+      327(param):     10(ptr) Variable Function
+      329(param):     12(ptr) Variable Function
+      330(param):     14(ptr) Variable Function
+             323:     11(int) FunctionCall 31(TDCameraIndex()
+             326:    7(fvec4) Load 45(v)
+                              Store 325(param) 326
+             328:    9(fvec3) Load 46(uv)
+                              Store 327(param) 328
+                              Store 329(param) 323
+                              Store 330(param) 324
+             331:    7(fvec4) FunctionCall 26(iTDWorldToProj(vf4;vf3;i1;b1;) 325(param) 327(param) 329(param) 330(param)
+                              ReturnValue 331
+                              FunctionEnd
+52(TDWorldToProj(vf3;vf3;):    7(fvec4) Function None 49
+           50(v):     10(ptr) FunctionParameter
+          51(uv):     10(ptr) FunctionParameter
+              53:             Label
+      340(param):      8(ptr) Variable Function
+      341(param):     10(ptr) Variable Function
+             334:    9(fvec3) Load 50(v)
+             336:    6(float) CompositeExtract 334 0
+             337:    6(float) CompositeExtract 334 1
+             338:    6(float) CompositeExtract 334 2
+             339:    7(fvec4) CompositeConstruct 336 337 338 335
+                              Store 340(param) 339
+             342:    9(fvec3) Load 51(uv)
+                              Store 341(param) 342
+             343:    7(fvec4) FunctionCall 47(TDWorldToProj(vf4;vf3;) 340(param) 341(param)
+                              ReturnValue 343
+                              FunctionEnd
+56(TDWorldToProj(vf4;):    7(fvec4) Function None 54
+           55(v):      8(ptr) FunctionParameter
+              57:             Label
+      347(param):      8(ptr) Variable Function
+      349(param):     10(ptr) Variable Function
+             348:    7(fvec4) Load 55(v)
+                              Store 347(param) 348
+                              Store 349(param) 346
+             350:    7(fvec4) FunctionCall 47(TDWorldToProj(vf4;vf3;) 347(param) 349(param)
+                              ReturnValue 350
+                              FunctionEnd
+60(TDWorldToProj(vf3;):    7(fvec4) Function None 58
+           59(v):     10(ptr) FunctionParameter
+              61:             Label
+      358(param):      8(ptr) Variable Function
+             353:    9(fvec3) Load 59(v)
+             354:    6(float) CompositeExtract 353 0
+             355:    6(float) CompositeExtract 353 1
+             356:    6(float) CompositeExtract 353 2
+             357:    7(fvec4) CompositeConstruct 354 355 356 335
+                              Store 358(param) 357
+             359:    7(fvec4) FunctionCall 56(TDWorldToProj(vf4;) 358(param)
+                              ReturnValue 359
+                              FunctionEnd
+63(TDPointColor():    7(fvec4) Function None 62
+              64:             Label
+             362:    7(fvec4) Load 256(Cd)
+                              ReturnValue 362
+                              FunctionEnd
+68(TDInstanceTexCoord(i1;vf3;):    9(fvec3) Function None 65
+       66(index):     12(ptr) FunctionParameter
+           67(t):     10(ptr) FunctionParameter
+              69:             Label
+      365(coord):     12(ptr) Variable Function
+       367(samp):      8(ptr) Variable Function
+          376(v):     10(ptr) Variable Function
+             366:     11(int) Load 66(index)
+                              Store 365(coord) 366
+             372:         369 Load 371(sTDInstanceTexCoord)
+             373:     11(int) Load 365(coord)
+             374:         368 Image 372
+             375:    7(fvec4) ImageFetch 374 373
+                              Store 367(samp) 375
+             379:    378(ptr) AccessChain 67(t) 377
+             380:    6(float) Load 379
+             381:    378(ptr) AccessChain 376(v) 377
+                              Store 381 380
+             382:    378(ptr) AccessChain 67(t) 234
+             383:    6(float) Load 382
+             384:    378(ptr) AccessChain 376(v) 234
+                              Store 384 383
+             385:    378(ptr) AccessChain 367(samp) 377
+             386:    6(float) Load 385
+             388:    378(ptr) AccessChain 376(v) 387
+                              Store 388 386
+             389:    9(fvec3) Load 376(v)
+                              Store 67(t) 389
+             390:    9(fvec3) Load 67(t)
+                              ReturnValue 390
+                              FunctionEnd
+72(TDInstanceActive(i1;):    13(bool) Function None 70
+       71(index):     12(ptr) FunctionParameter
+              73:             Label
+      397(coord):     12(ptr) Variable Function
+       399(samp):      8(ptr) Variable Function
+          405(v):    378(ptr) Variable Function
+             393:    302(ptr) AccessChain 301 208
+             394:     11(int) Load 393
+             395:     11(int) Load 71(index)
+             396:     11(int) ISub 395 394
+                              Store 71(index) 396
+             398:     11(int) Load 71(index)
+                              Store 397(coord) 398
+             401:         369 Load 400(sTDInstanceT)
+             402:     11(int) Load 397(coord)
+             403:         368 Image 401
+             404:    7(fvec4) ImageFetch 403 402
+                              Store 399(samp) 404
+             406:    378(ptr) AccessChain 399(samp) 377
+             407:    6(float) Load 406
+                              Store 405(v) 407
+             408:    6(float) Load 405(v)
+             409:    13(bool) FUnordNotEqual 408 266
+                              ReturnValue 409
+                              FunctionEnd
+77(iTDInstanceTranslate(i1;b1;):    9(fvec3) Function None 74
+       75(index):     12(ptr) FunctionParameter
+76(instanceActive):     14(ptr) FunctionParameter
+              78:             Label
+  412(origIndex):     12(ptr) Variable Function
+      418(coord):     12(ptr) Variable Function
+       420(samp):      8(ptr) Variable Function
+          425(v):     10(ptr) Variable Function
+             413:     11(int) Load 75(index)
+                              Store 412(origIndex) 413
+             414:    302(ptr) AccessChain 301 208
+             415:     11(int) Load 414
+             416:     11(int) Load 75(index)
+             417:     11(int) ISub 416 415
+                              Store 75(index) 417
+             419:     11(int) Load 75(index)
+                              Store 418(coord) 419
+             421:         369 Load 400(sTDInstanceT)
+             422:     11(int) Load 418(coord)
+             423:         368 Image 421
+             424:    7(fvec4) ImageFetch 423 422
+                              Store 420(samp) 424
+             426:    378(ptr) AccessChain 420(samp) 234
+             427:    6(float) Load 426
+             428:    378(ptr) AccessChain 425(v) 377
+                              Store 428 427
+             429:    378(ptr) AccessChain 420(samp) 387
+             430:    6(float) Load 429
+             431:    378(ptr) AccessChain 425(v) 234
+                              Store 431 430
+             433:    378(ptr) AccessChain 420(samp) 432
+             434:    6(float) Load 433
+             435:    378(ptr) AccessChain 425(v) 387
+                              Store 435 434
+             436:    378(ptr) AccessChain 420(samp) 377
+             437:    6(float) Load 436
+             438:    13(bool) FUnordNotEqual 437 266
+                              Store 76(instanceActive) 438
+             439:    9(fvec3) Load 425(v)
+                              ReturnValue 439
+                              FunctionEnd
+81(TDInstanceTranslate(i1;):    9(fvec3) Function None 79
+       80(index):     12(ptr) FunctionParameter
+              82:             Label
+      446(coord):     12(ptr) Variable Function
+       448(samp):      8(ptr) Variable Function
+          453(v):     10(ptr) Variable Function
+             442:    302(ptr) AccessChain 301 208
+             443:     11(int) Load 442
+             444:     11(int) Load 80(index)
+             445:     11(int) ISub 444 443
+                              Store 80(index) 445
+             447:     11(int) Load 80(index)
+                              Store 446(coord) 447
+             449:         369 Load 400(sTDInstanceT)
+             450:     11(int) Load 446(coord)
+             451:         368 Image 449
+             452:    7(fvec4) ImageFetch 451 450
+                              Store 448(samp) 452
+             454:    378(ptr) AccessChain 448(samp) 234
+             455:    6(float) Load 454
+             456:    378(ptr) AccessChain 453(v) 377
+                              Store 456 455
+             457:    378(ptr) AccessChain 448(samp) 387
+             458:    6(float) Load 457
+             459:    378(ptr) AccessChain 453(v) 234
+                              Store 459 458
+             460:    378(ptr) AccessChain 448(samp) 432
+             461:    6(float) Load 460
+             462:    378(ptr) AccessChain 453(v) 387
+                              Store 462 461
+             463:    9(fvec3) Load 453(v)
+                              ReturnValue 463
+                              FunctionEnd
+86(TDInstanceRotateMat(i1;):          83 Function None 84
+       85(index):     12(ptr) FunctionParameter
+              87:             Label
+          470(v):     10(ptr) Variable Function
+          472(m):    471(ptr) Variable Function
+             466:    302(ptr) AccessChain 301 208
+             467:     11(int) Load 466
+             468:     11(int) Load 85(index)
+             469:     11(int) ISub 468 467
+                              Store 85(index) 469
+                              Store 470(v) 346
+                              Store 472(m) 476
+             477:          83 Load 472(m)
+                              ReturnValue 477
+                              FunctionEnd
+89(TDInstanceScale(i1;):    9(fvec3) Function None 79
+       88(index):     12(ptr) FunctionParameter
+              90:             Label
+          484(v):     10(ptr) Variable Function
+             480:    302(ptr) AccessChain 301 208
+             481:     11(int) Load 480
+             482:     11(int) Load 88(index)
+             483:     11(int) ISub 482 481
+                              Store 88(index) 483
+                              Store 484(v) 485
+             486:    9(fvec3) Load 484(v)
+                              ReturnValue 486
+                              FunctionEnd
+92(TDInstancePivot(i1;):    9(fvec3) Function None 79
+       91(index):     12(ptr) FunctionParameter
+              93:             Label
+          493(v):     10(ptr) Variable Function
+             489:    302(ptr) AccessChain 301 208
+             490:     11(int) Load 489
+             491:     11(int) Load 91(index)
+             492:     11(int) ISub 491 490
+                              Store 91(index) 492
+                              Store 493(v) 346
+             494:    9(fvec3) Load 493(v)
+                              ReturnValue 494
+                              FunctionEnd
+95(TDInstanceRotTo(i1;):    9(fvec3) Function None 79
+       94(index):     12(ptr) FunctionParameter
+              96:             Label
+          501(v):     10(ptr) Variable Function
+             497:    302(ptr) AccessChain 301 208
+             498:     11(int) Load 497
+             499:     11(int) Load 94(index)
+             500:     11(int) ISub 499 498
+                              Store 94(index) 500
+                              Store 501(v) 475
+             502:    9(fvec3) Load 501(v)
+                              ReturnValue 502
+                              FunctionEnd
+98(TDInstanceRotUp(i1;):    9(fvec3) Function None 79
+       97(index):     12(ptr) FunctionParameter
+              99:             Label
+          509(v):     10(ptr) Variable Function
+             505:    302(ptr) AccessChain 301 208
+             506:     11(int) Load 505
+             507:     11(int) Load 97(index)
+             508:     11(int) ISub 507 506
+                              Store 97(index) 508
+                              Store 509(v) 474
+             510:    9(fvec3) Load 509(v)
+                              ReturnValue 510
+                              FunctionEnd
+103(TDInstanceMat(i1;):         100 Function None 101
+         102(id):     12(ptr) FunctionParameter
+             104:             Label
+513(instanceActive):     14(ptr) Variable Function
+          514(t):     10(ptr) Variable Function
+      515(param):     12(ptr) Variable Function
+      517(param):     14(ptr) Variable Function
+          528(m):    527(ptr) Variable Function
+         534(tt):     10(ptr) Variable Function
+                              Store 513(instanceActive) 324
+             516:     11(int) Load 102(id)
+                              Store 515(param) 516
+             518:    9(fvec3) FunctionCall 77(iTDInstanceTranslate(i1;b1;) 515(param) 517(param)
+             519:    13(bool) Load 517(param)
+                              Store 513(instanceActive) 519
+                              Store 514(t) 518
+             520:    13(bool) Load 513(instanceActive)
+             521:    13(bool) LogicalNot 520
+                              SelectionMerge 523 None
+                              BranchConditional 521 522 523
+             522:               Label
+                                ReturnValue 525
+             523:             Label
+                              Store 528(m) 533
+             535:    9(fvec3) Load 514(t)
+                              Store 534(tt) 535
+             536:    378(ptr) AccessChain 528(m) 208 377
+             537:    6(float) Load 536
+             538:    378(ptr) AccessChain 534(tt) 377
+             539:    6(float) Load 538
+             540:    6(float) FMul 537 539
+             541:    378(ptr) AccessChain 528(m) 248 377
+             542:    6(float) Load 541
+             543:    6(float) FAdd 542 540
+             544:    378(ptr) AccessChain 528(m) 248 377
+                              Store 544 543
+             545:    378(ptr) AccessChain 528(m) 208 234
+             546:    6(float) Load 545
+             547:    378(ptr) AccessChain 534(tt) 377
+             548:    6(float) Load 547
+             549:    6(float) FMul 546 548
+             550:    378(ptr) AccessChain 528(m) 248 234
+             551:    6(float) Load 550
+             552:    6(float) FAdd 551 549
+             553:    378(ptr) AccessChain 528(m) 248 234
+                              Store 553 552
+             554:    378(ptr) AccessChain 528(m) 208 387
+             555:    6(float) Load 554
+             556:    378(ptr) AccessChain 534(tt) 377
+             557:    6(float) Load 556
+             558:    6(float) FMul 555 557
+             559:    378(ptr) AccessChain 528(m) 248 387
+             560:    6(float) Load 559
+             561:    6(float) FAdd 560 558
+             562:    378(ptr) AccessChain 528(m) 248 387
+                              Store 562 561
+             563:    378(ptr) AccessChain 528(m) 208 432
+             564:    6(float) Load 563
+             565:    378(ptr) AccessChain 534(tt) 377
+             566:    6(float) Load 565
+             567:    6(float) FMul 564 566
+             568:    378(ptr) AccessChain 528(m) 248 432
+             569:    6(float) Load 568
+             570:    6(float) FAdd 569 567
+             571:    378(ptr) AccessChain 528(m) 248 432
+                              Store 571 570
+             572:    378(ptr) AccessChain 528(m) 251 377
+             573:    6(float) Load 572
+             574:    378(ptr) AccessChain 534(tt) 234
+             575:    6(float) Load 574
+             576:    6(float) FMul 573 575
+             577:    378(ptr) AccessChain 528(m) 248 377
+             578:    6(float) Load 577
+             579:    6(float) FAdd 578 576
+             580:    378(ptr) AccessChain 528(m) 248 377
+                              Store 580 579
+             581:    378(ptr) AccessChain 528(m) 251 234
+             582:    6(float) Load 581
+             583:    378(ptr) AccessChain 534(tt) 234
+             584:    6(float) Load 583
+             585:    6(float) FMul 582 584
+             586:    378(ptr) AccessChain 528(m) 248 234
+             587:    6(float) Load 586
+             588:    6(float) FAdd 587 585
+             589:    378(ptr) AccessChain 528(m) 248 234
+                              Store 589 588
+             590:    378(ptr) AccessChain 528(m) 251 387
+             591:    6(float) Load 590
+             592:    378(ptr) AccessChain 534(tt) 234
+             593:    6(float) Load 592
+             594:    6(float) FMul 591 593
+             595:    378(ptr) AccessChain 528(m) 248 387
+             596:    6(float) Load 595
+             597:    6(float) FAdd 596 594
+             598:    378(ptr) AccessChain 528(m) 248 387
+                              Store 598 597
+             599:    378(ptr) AccessChain 528(m) 251 432
+             600:    6(float) Load 599
+             601:    378(ptr) AccessChain 534(tt) 234
+             602:    6(float) Load 601
+             603:    6(float) FMul 600 602
+             604:    378(ptr) AccessChain 528(m) 248 432
+             605:    6(float) Load 604
+             606:    6(float) FAdd 605 603
+             607:    378(ptr) AccessChain 528(m) 248 432
+                              Store 607 606
+             608:    378(ptr) AccessChain 528(m) 217 377
+             609:    6(float) Load 608
+             610:    378(ptr) AccessChain 534(tt) 387
+             611:    6(float) Load 610
+             612:    6(float) FMul 609 611
+             613:    378(ptr) AccessChain 528(m) 248 377
+             614:    6(float) Load 613
+             615:    6(float) FAdd 614 612
+             616:    378(ptr) AccessChain 528(m) 248 377
+                              Store 616 615
+             617:    378(ptr) AccessChain 528(m) 217 234
+             618:    6(float) Load 617
+             619:    378(ptr) AccessChain 534(tt) 387
+             620:    6(float) Load 619
+             621:    6(float) FMul 618 620
+             622:    378(ptr) AccessChain 528(m) 248 234
+             623:    6(float) Load 622
+             624:    6(float) FAdd 623 621
+             625:    378(ptr) AccessChain 528(m) 248 234
+                              Store 625 624
+             626:    378(ptr) AccessChain 528(m) 217 387
+             627:    6(float) Load 626
+             628:    378(ptr) AccessChain 534(tt) 387
+             629:    6(float) Load 628
+             630:    6(float) FMul 627 629
+             631:    378(ptr) AccessChain 528(m) 248 387
+             632:    6(float) Load 631
+             633:    6(float) FAdd 632 630
+             634:    378(ptr) AccessChain 528(m) 248 387
+                              Store 634 633
+             635:    378(ptr) AccessChain 528(m) 217 432
+             636:    6(float) Load 635
+             637:    378(ptr) AccessChain 534(tt) 387
+             638:    6(float) Load 637
+             639:    6(float) FMul 636 638
+             640:    378(ptr) AccessChain 528(m) 248 432
+             641:    6(float) Load 640
+             642:    6(float) FAdd 641 639
+             643:    378(ptr) AccessChain 528(m) 248 432
+                              Store 643 642
+             644:         100 Load 528(m)
+                              ReturnValue 644
+                              FunctionEnd
+106(TDInstanceMat3(i1;):          83 Function None 84
+         105(id):     12(ptr) FunctionParameter
+             107:             Label
+          647(m):    471(ptr) Variable Function
+                              Store 647(m) 476
+             648:          83 Load 647(m)
+                              ReturnValue 648
+                              FunctionEnd
+109(TDInstanceMat3ForNorm(i1;):          83 Function None 84
+         108(id):     12(ptr) FunctionParameter
+             110:             Label
+          651(m):    471(ptr) Variable Function
+      652(param):     12(ptr) Variable Function
+             653:     11(int) Load 108(id)
+                              Store 652(param) 653
+             654:          83 FunctionCall 106(TDInstanceMat3(i1;) 652(param)
+                              Store 651(m) 654
+             655:          83 Load 651(m)
+                              ReturnValue 655
+                              FunctionEnd
+114(TDInstanceColor(i1;vf4;):    7(fvec4) Function None 111
+      112(index):     12(ptr) FunctionParameter
+   113(curColor):      8(ptr) FunctionParameter
+             115:             Label
+      662(coord):     12(ptr) Variable Function
+       664(samp):      8(ptr) Variable Function
+          670(v):      8(ptr) Variable Function
+             658:    302(ptr) AccessChain 301 208
+             659:     11(int) Load 658
+             660:     11(int) Load 112(index)
+             661:     11(int) ISub 660 659
+                              Store 112(index) 661
+             663:     11(int) Load 112(index)
+                              Store 662(coord) 663
+             666:         369 Load 665(sTDInstanceColor)
+             667:     11(int) Load 662(coord)
+             668:         368 Image 666
+             669:    7(fvec4) ImageFetch 668 667
+                              Store 664(samp) 669
+             671:    378(ptr) AccessChain 664(samp) 377
+             672:    6(float) Load 671
+             673:    378(ptr) AccessChain 670(v) 377
+                              Store 673 672
+             674:    378(ptr) AccessChain 664(samp) 234
+             675:    6(float) Load 674
+             676:    378(ptr) AccessChain 670(v) 234
+                              Store 676 675
+             677:    378(ptr) AccessChain 664(samp) 387
+             678:    6(float) Load 677
+             679:    378(ptr) AccessChain 670(v) 387
+                              Store 679 678
+             680:    378(ptr) AccessChain 670(v) 432
+                              Store 680 335
+             681:    378(ptr) AccessChain 670(v) 377
+             682:    6(float) Load 681
+             683:    378(ptr) AccessChain 113(curColor) 377
+                              Store 683 682
+             684:    378(ptr) AccessChain 670(v) 234
+             685:    6(float) Load 684
+             686:    378(ptr) AccessChain 113(curColor) 234
+                              Store 686 685
+             687:    378(ptr) AccessChain 670(v) 387
+             688:    6(float) Load 687
+             689:    378(ptr) AccessChain 113(curColor) 387
+                              Store 689 688
+             690:    7(fvec4) Load 113(curColor)
+                              ReturnValue 690
+                              FunctionEnd
+118(TDInstanceDeform(i1;vf4;):    7(fvec4) Function None 111
+         116(id):     12(ptr) FunctionParameter
+        117(pos):      8(ptr) FunctionParameter
+             119:             Label
+      693(param):     12(ptr) Variable Function
+             694:     11(int) Load 116(id)
+                              Store 693(param) 694
+             695:         100 FunctionCall 103(TDInstanceMat(i1;) 693(param)
+             696:    7(fvec4) Load 117(pos)
+             697:    7(fvec4) MatrixTimesVector 695 696
+                              Store 117(pos) 697
+             698:     11(int) FunctionCall 31(TDCameraIndex()
+             699:    275(ptr) AccessChain 273 208 698 208
+             700:         100 Load 699
+             701:    7(fvec4) Load 117(pos)
+             702:    7(fvec4) MatrixTimesVector 700 701
+                              ReturnValue 702
+                              FunctionEnd
+122(TDInstanceDeformVec(i1;vf3;):    9(fvec3) Function None 65
+         120(id):     12(ptr) FunctionParameter
+        121(vec):     10(ptr) FunctionParameter
+             123:             Label
+          705(m):    471(ptr) Variable Function
+      706(param):     12(ptr) Variable Function
+             707:     11(int) Load 120(id)
+                              Store 706(param) 707
+             708:          83 FunctionCall 106(TDInstanceMat3(i1;) 706(param)
+                              Store 705(m) 708
+             709:     11(int) FunctionCall 31(TDCameraIndex()
+             710:    275(ptr) AccessChain 273 208 709 208
+             711:         100 Load 710
+             712:    7(fvec4) CompositeExtract 711 0
+             713:    9(fvec3) VectorShuffle 712 712 0 1 2
+             714:    7(fvec4) CompositeExtract 711 1
+             715:    9(fvec3) VectorShuffle 714 714 0 1 2
+             716:    7(fvec4) CompositeExtract 711 2
+             717:    9(fvec3) VectorShuffle 716 716 0 1 2
+             718:          83 CompositeConstruct 713 715 717
+             719:          83 Load 705(m)
+             720:    9(fvec3) Load 121(vec)
+             721:    9(fvec3) MatrixTimesVector 719 720
+             722:    9(fvec3) MatrixTimesVector 718 721
+                              ReturnValue 722
+                              FunctionEnd
+126(TDInstanceDeformNorm(i1;vf3;):    9(fvec3) Function None 65
+         124(id):     12(ptr) FunctionParameter
+        125(vec):     10(ptr) FunctionParameter
+             127:             Label
+          725(m):    471(ptr) Variable Function
+      726(param):     12(ptr) Variable Function
+             727:     11(int) Load 124(id)
+                              Store 726(param) 727
+             728:          83 FunctionCall 109(TDInstanceMat3ForNorm(i1;) 726(param)
+                              Store 725(m) 728
+             729:     11(int) FunctionCall 31(TDCameraIndex()
+             732:    731(ptr) AccessChain 273 208 729 730
+             733:          83 Load 732
+             734:    9(fvec3) CompositeExtract 733 0
+             735:    9(fvec3) CompositeExtract 733 1
+             736:    9(fvec3) CompositeExtract 733 2
+             737:          83 CompositeConstruct 734 735 736
+             738:          83 Load 725(m)
+             739:    9(fvec3) Load 125(vec)
+             740:    9(fvec3) MatrixTimesVector 738 739
+             741:    9(fvec3) MatrixTimesVector 737 740
+                              ReturnValue 741
+                              FunctionEnd
+129(TDInstanceDeform(vf4;):    7(fvec4) Function None 54
+        128(pos):      8(ptr) FunctionParameter
+             130:             Label
+      745(param):     12(ptr) Variable Function
+      746(param):      8(ptr) Variable Function
+             744:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 745(param) 744
+             747:    7(fvec4) Load 128(pos)
+                              Store 746(param) 747
+             748:    7(fvec4) FunctionCall 118(TDInstanceDeform(i1;vf4;) 745(param) 746(param)
+                              ReturnValue 748
+                              FunctionEnd
+133(TDInstanceDeformVec(vf3;):    9(fvec3) Function None 131
+        132(vec):     10(ptr) FunctionParameter
+             134:             Label
+      752(param):     12(ptr) Variable Function
+      753(param):     10(ptr) Variable Function
+             751:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 752(param) 751
+             754:    9(fvec3) Load 132(vec)
+                              Store 753(param) 754
+             755:    9(fvec3) FunctionCall 122(TDInstanceDeformVec(i1;vf3;) 752(param) 753(param)
+                              ReturnValue 755
+                              FunctionEnd
+136(TDInstanceDeformNorm(vf3;):    9(fvec3) Function None 131
+        135(vec):     10(ptr) FunctionParameter
+             137:             Label
+      759(param):     12(ptr) Variable Function
+      760(param):     10(ptr) Variable Function
+             758:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 759(param) 758
+             761:    9(fvec3) Load 135(vec)
+                              Store 760(param) 761
+             762:    9(fvec3) FunctionCall 126(TDInstanceDeformNorm(i1;vf3;) 759(param) 760(param)
+                              ReturnValue 762
+                              FunctionEnd
+139(TDInstanceActive():    13(bool) Function None 138
+             140:             Label
+      766(param):     12(ptr) Variable Function
+             765:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 766(param) 765
+             767:    13(bool) FunctionCall 72(TDInstanceActive(i1;) 766(param)
+                              ReturnValue 767
+                              FunctionEnd
+141(TDInstanceTranslate():    9(fvec3) Function None 33
+             142:             Label
+      771(param):     12(ptr) Variable Function
+             770:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 771(param) 770
+             772:    9(fvec3) FunctionCall 81(TDInstanceTranslate(i1;) 771(param)
+                              ReturnValue 772
+                              FunctionEnd
+144(TDInstanceRotateMat():          83 Function None 143
+             145:             Label
+      776(param):     12(ptr) Variable Function
+             775:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 776(param) 775
+             777:          83 FunctionCall 86(TDInstanceRotateMat(i1;) 776(param)
+                              ReturnValue 777
+                              FunctionEnd
+146(TDInstanceScale():    9(fvec3) Function None 33
+             147:             Label
+      781(param):     12(ptr) Variable Function
+             780:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 781(param) 780
+             782:    9(fvec3) FunctionCall 89(TDInstanceScale(i1;) 781(param)
+                              ReturnValue 782
+                              FunctionEnd
+149(TDInstanceMat():         100 Function None 148
+             150:             Label
+      786(param):     12(ptr) Variable Function
+             785:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 786(param) 785
+             787:         100 FunctionCall 103(TDInstanceMat(i1;) 786(param)
+                              ReturnValue 787
+                              FunctionEnd
+151(TDInstanceMat3():          83 Function None 143
+             152:             Label
+      791(param):     12(ptr) Variable Function
+             790:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 791(param) 790
+             792:          83 FunctionCall 106(TDInstanceMat3(i1;) 791(param)
+                              ReturnValue 792
+                              FunctionEnd
+154(TDInstanceTexCoord(vf3;):    9(fvec3) Function None 131
+          153(t):     10(ptr) FunctionParameter
+             155:             Label
+      796(param):     12(ptr) Variable Function
+      797(param):     10(ptr) Variable Function
+             795:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 796(param) 795
+             798:    9(fvec3) Load 153(t)
+                              Store 797(param) 798
+             799:    9(fvec3) FunctionCall 68(TDInstanceTexCoord(i1;vf3;) 796(param) 797(param)
+                              ReturnValue 799
+                              FunctionEnd
+157(TDInstanceColor(vf4;):    7(fvec4) Function None 54
+   156(curColor):      8(ptr) FunctionParameter
+             158:             Label
+      803(param):     12(ptr) Variable Function
+      804(param):      8(ptr) Variable Function
+             802:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 803(param) 802
+             805:    7(fvec4) Load 156(curColor)
+                              Store 804(param) 805
+             806:    7(fvec4) FunctionCall 114(TDInstanceColor(i1;vf4;) 803(param) 804(param)
+                              ReturnValue 806
+                              FunctionEnd
+160(TDSkinnedDeform(vf4;):    7(fvec4) Function None 54
+        159(pos):      8(ptr) FunctionParameter
+             161:             Label
+             809:    7(fvec4) Load 159(pos)
+                              ReturnValue 809
+                              FunctionEnd
+163(TDSkinnedDeformVec(vf3;):    9(fvec3) Function None 131
+        162(vec):     10(ptr) FunctionParameter
+             164:             Label
+             812:    9(fvec3) Load 162(vec)
+                              ReturnValue 812
+                              FunctionEnd
+169(TDFastDeformTangent(vf3;vf4;vf3;):    9(fvec3) Function None 165
+    166(oldNorm):     10(ptr) FunctionParameter
+ 167(oldTangent):      8(ptr) FunctionParameter
+168(deformedNorm):     10(ptr) FunctionParameter
+             170:             Label
+             815:    7(fvec4) Load 167(oldTangent)
+             816:    9(fvec3) VectorShuffle 815 815 0 1 2
+                              ReturnValue 816
+                              FunctionEnd
+172(TDBoneMat(i1;):         100 Function None 101
+      171(index):     12(ptr) FunctionParameter
+             173:             Label
+                              ReturnValue 533
+                              FunctionEnd
+175(TDDeform(vf4;):    7(fvec4) Function None 54
+        174(pos):      8(ptr) FunctionParameter
+             176:             Label
+      821(param):      8(ptr) Variable Function
+      824(param):      8(ptr) Variable Function
+             822:    7(fvec4) Load 174(pos)
+                              Store 821(param) 822
+             823:    7(fvec4) FunctionCall 160(TDSkinnedDeform(vf4;) 821(param)
+                              Store 174(pos) 823
+             825:    7(fvec4) Load 174(pos)
+                              Store 824(param) 825
+             826:    7(fvec4) FunctionCall 129(TDInstanceDeform(vf4;) 824(param)
+                              Store 174(pos) 826
+             827:    7(fvec4) Load 174(pos)
+                              ReturnValue 827
+                              FunctionEnd
+180(TDDeform(i1;vf3;):    7(fvec4) Function None 177
+ 178(instanceID):     12(ptr) FunctionParameter
+          179(p):     10(ptr) FunctionParameter
+             181:             Label
+        830(pos):      8(ptr) Variable Function
+      836(param):      8(ptr) Variable Function
+      839(param):     12(ptr) Variable Function
+      841(param):      8(ptr) Variable Function
+             831:    9(fvec3) Load 179(p)
+             832:    6(float) CompositeExtract 831 0
+             833:    6(float) CompositeExtract 831 1
+             834:    6(float) CompositeExtract 831 2
+             835:    7(fvec4) CompositeConstruct 832 833 834 335
+                              Store 830(pos) 835
+             837:    7(fvec4) Load 830(pos)
+                              Store 836(param) 837
+             838:    7(fvec4) FunctionCall 160(TDSkinnedDeform(vf4;) 836(param)
+                              Store 830(pos) 838
+             840:     11(int) Load 178(instanceID)
+                              Store 839(param) 840
+             842:    7(fvec4) Load 830(pos)
+                              Store 841(param) 842
+             843:    7(fvec4) FunctionCall 118(TDInstanceDeform(i1;vf4;) 839(param) 841(param)
+                              Store 830(pos) 843
+             844:    7(fvec4) Load 830(pos)
+                              ReturnValue 844
+                              FunctionEnd
+183(TDDeform(vf3;):    7(fvec4) Function None 58
+        182(pos):     10(ptr) FunctionParameter
+             184:             Label
+      848(param):     12(ptr) Variable Function
+      849(param):     10(ptr) Variable Function
+             847:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 848(param) 847
+             850:    9(fvec3) Load 182(pos)
+                              Store 849(param) 850
+             851:    7(fvec4) FunctionCall 180(TDDeform(i1;vf3;) 848(param) 849(param)
+                              ReturnValue 851
+                              FunctionEnd
+187(TDDeformVec(i1;vf3;):    9(fvec3) Function None 65
+ 185(instanceID):     12(ptr) FunctionParameter
+        186(vec):     10(ptr) FunctionParameter
+             188:             Label
+      854(param):     10(ptr) Variable Function
+      857(param):     12(ptr) Variable Function
+      859(param):     10(ptr) Variable Function
+             855:    9(fvec3) Load 186(vec)
+                              Store 854(param) 855
+             856:    9(fvec3) FunctionCall 163(TDSkinnedDeformVec(vf3;) 854(param)
+                              Store 186(vec) 856
+             858:     11(int) Load 185(instanceID)
+                              Store 857(param) 858
+             860:    9(fvec3) Load 186(vec)
+                              Store 859(param) 860
+             861:    9(fvec3) FunctionCall 122(TDInstanceDeformVec(i1;vf3;) 857(param) 859(param)
+                              Store 186(vec) 861
+             862:    9(fvec3) Load 186(vec)
+                              ReturnValue 862
+                              FunctionEnd
+190(TDDeformVec(vf3;):    9(fvec3) Function None 131
+        189(vec):     10(ptr) FunctionParameter
+             191:             Label
+      866(param):     12(ptr) Variable Function
+      867(param):     10(ptr) Variable Function
+             865:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 866(param) 865
+             868:    9(fvec3) Load 189(vec)
+                              Store 867(param) 868
+             869:    9(fvec3) FunctionCall 187(TDDeformVec(i1;vf3;) 866(param) 867(param)
+                              ReturnValue 869
+                              FunctionEnd
+194(TDDeformNorm(i1;vf3;):    9(fvec3) Function None 65
+ 192(instanceID):     12(ptr) FunctionParameter
+        193(vec):     10(ptr) FunctionParameter
+             195:             Label
+      872(param):     10(ptr) Variable Function
+      875(param):     12(ptr) Variable Function
+      877(param):     10(ptr) Variable Function
+             873:    9(fvec3) Load 193(vec)
+                              Store 872(param) 873
+             874:    9(fvec3) FunctionCall 163(TDSkinnedDeformVec(vf3;) 872(param)
+                              Store 193(vec) 874
+             876:     11(int) Load 192(instanceID)
+                              Store 875(param) 876
+             878:    9(fvec3) Load 193(vec)
+                              Store 877(param) 878
+             879:    9(fvec3) FunctionCall 126(TDInstanceDeformNorm(i1;vf3;) 875(param) 877(param)
+                              Store 193(vec) 879
+             880:    9(fvec3) Load 193(vec)
+                              ReturnValue 880
+                              FunctionEnd
+197(TDDeformNorm(vf3;):    9(fvec3) Function None 131
+        196(vec):     10(ptr) FunctionParameter
+             198:             Label
+      884(param):     12(ptr) Variable Function
+      885(param):     10(ptr) Variable Function
+             883:     11(int) FunctionCall 29(TDInstanceID()
+                              Store 884(param) 883
+             886:    9(fvec3) Load 196(vec)
+                              Store 885(param) 886
+             887:    9(fvec3) FunctionCall 194(TDDeformNorm(i1;vf3;) 884(param) 885(param)
+                              ReturnValue 887
+                              FunctionEnd
+200(TDSkinnedDeformNorm(vf3;):    9(fvec3) Function None 131
+        199(vec):     10(ptr) FunctionParameter
+             201:             Label
+      890(param):     10(ptr) Variable Function
+             891:    9(fvec3) Load 199(vec)
+                              Store 890(param) 891
+             892:    9(fvec3) FunctionCall 163(TDSkinnedDeformVec(vf3;) 890(param)
+                              Store 199(vec) 892
+             893:    9(fvec3) Load 199(vec)
+                              ReturnValue 893
+                              FunctionEnd
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 1297
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 336 429 458 485
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              Name 4  "main"
+                              Name 11  "TDColor(vf4;"
+                              Name 10  "color"
+                              Name 13  "TDCheckOrderIndTrans("
+                              Name 15  "TDCheckDiscard("
+                              Name 18  "TDDither(vf4;"
+                              Name 17  "color"
+                              Name 26  "TDFrontFacing(vf3;vf3;"
+                              Name 24  "pos"
+                              Name 25  "normal"
+                              Name 34  "TDAttenuateLight(i1;f1;"
+                              Name 32  "index"
+                              Name 33  "lightDist"
+                              Name 38  "TDAlphaTest(f1;"
+                              Name 37  "alpha"
+                              Name 43  "TDHardShadow(i1;vf3;"
+                              Name 41  "lightIndex"
+                              Name 42  "worldSpacePos"
+                              Name 50  "TDSoftShadow(i1;vf3;i1;i1;"
+                              Name 46  "lightIndex"
+                              Name 47  "worldSpacePos"
+                              Name 48  "samples"
+                              Name 49  "steps"
+                              Name 54  "TDSoftShadow(i1;vf3;"
+                              Name 52  "lightIndex"
+                              Name 53  "worldSpacePos"
+                              Name 58  "TDShadow(i1;vf3;"
+                              Name 56  "lightIndex"
+                              Name 57  "worldSpacePos"
+                              Name 64  "iTDRadicalInverse_VdC(u1;"
+                              Name 63  "bits"
+                              Name 70  "iTDHammersley(u1;u1;"
+                              Name 68  "i"
+                              Name 69  "N"
+                              Name 77  "iTDImportanceSampleGGX(vf2;f1;vf3;"
+                              Name 74  "Xi"
+                              Name 75  "roughness2"
+                              Name 76  "N"
+                              Name 83  "iTDDistributionGGX(vf3;vf3;f1;"
+                              Name 80  "normal"
+                              Name 81  "half_vector"
+                              Name 82  "roughness2"
+                              Name 88  "iTDCalcF(vf3;f1;"
+                              Name 86  "F0"
+                              Name 87  "VdotH"
+                              Name 94  "iTDCalcG(f1;f1;f1;"
+                              Name 91  "NdotL"
+                              Name 92  "NdotV"
+                              Name 93  "k"
+                              Name 96  "TDPBRResult"
+                              MemberName 96(TDPBRResult) 0  "diffuse"
+                              MemberName 96(TDPBRResult) 1  "specular"
+                              MemberName 96(TDPBRResult) 2  "shadowStrength"
+                              Name 107  "TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;"
+                              Name 98  "index"
+                              Name 99  "diffuseColor"
+                              Name 100  "specularColor"
+                              Name 101  "worldSpacePos"
+                              Name 102  "normal"
+                              Name 103  "shadowStrength"
+                              Name 104  "shadowColor"
+                              Name 105  "camVector"
+                              Name 106  "roughness"
+                              Name 122  "TDLightingPBR(vf3;vf3;f1;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;"
+                              Name 110  "diffuseContrib"
+                              Name 111  "specularContrib"
+                              Name 112  "shadowStrengthOut"
+                              Name 113  "index"
+                              Name 114  "diffuseColor"
+                              Name 115  "specularColor"
+                              Name 116  "worldSpacePos"
+                              Name 117  "normal"
+                              Name 118  "shadowStrength"
+                              Name 119  "shadowColor"
+                              Name 120  "camVector"
+                              Name 121  "roughness"
+                              Name 136  "TDLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;"
+                              Name 125  "diffuseContrib"
+                              Name 126  "specularContrib"
+                              Name 127  "index"
+                              Name 128  "diffuseColor"
+                              Name 129  "specularColor"
+                              Name 130  "worldSpacePos"
+                              Name 131  "normal"
+                              Name 132  "shadowStrength"
+                              Name 133  "shadowColor"
+                              Name 134  "camVector"
+                              Name 135  "roughness"
+                              Name 146  "TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1;"
+                              Name 139  "index"
+                              Name 140  "diffuseColor"
+                              Name 141  "specularColor"
+                              Name 142  "normal"
+                              Name 143  "camVector"
+                              Name 144  "roughness"
+                              Name 145  "ambientOcclusion"
+                              Name 158  "TDEnvLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;f1;"
+                              Name 149  "diffuseContrib"
+                              Name 150  "specularContrib"
+                              Name 151  "index"
+                              Name 152  "diffuseColor"
+                              Name 153  "specularColor"
+                              Name 154  "normal"
+                              Name 155  "camVector"
+                              Name 156  "roughness"
+                              Name 157  "ambientOcclusion"
+                              Name 160  "TDPhongResult"
+                              MemberName 160(TDPhongResult) 0  "diffuse"
+                              MemberName 160(TDPhongResult) 1  "specular"
+                              MemberName 160(TDPhongResult) 2  "specular2"
+                              MemberName 160(TDPhongResult) 3  "shadowStrength"
+                              Name 170  "TDLighting(i1;vf3;vf3;f1;vf3;vf3;f1;f1;"
+                              Name 162  "index"
+                              Name 163  "worldSpacePos"
+                              Name 164  "normal"
+                              Name 165  "shadowStrength"
+                              Name 166  "shadowColor"
+                              Name 167  "camVector"
+                              Name 168  "shininess"
+                              Name 169  "shininess2"
+                              Name 185  "TDLighting(vf3;vf3;vf3;f1;i1;vf3;vf3;f1;vf3;vf3;f1;f1;"
+                              Name 173  "diffuseContrib"
+                              Name 174  "specularContrib"
+                              Name 175  "specularContrib2"
+                              Name 176  "shadowStrengthOut"
+                              Name 177  "index"
+                              Name 178  "worldSpacePos"
+                              Name 179  "normal"
+                              Name 180  "shadowStrength"
+                              Name 181  "shadowColor"
+                              Name 182  "camVector"
+                              Name 183  "shininess"
+                              Name 184  "shininess2"
+                              Name 199  "TDLighting(vf3;vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;f1;"
+                              Name 188  "diffuseContrib"
+                              Name 189  "specularContrib"
+                              Name 190  "specularContrib2"
+                              Name 191  "index"
+                              Name 192  "worldSpacePos"
+                              Name 193  "normal"
+                              Name 194  "shadowStrength"
+                              Name 195  "shadowColor"
+                              Name 196  "camVector"
+                              Name 197  "shininess"
+                              Name 198  "shininess2"
+                              Name 211  "TDLighting(vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;"
+                              Name 202  "diffuseContrib"
+                              Name 203  "specularContrib"
+                              Name 204  "index"
+                              Name 205  "worldSpacePos"
+                              Name 206  "normal"
+                              Name 207  "shadowStrength"
+                              Name 208  "shadowColor"
+                              Name 209  "camVector"
+                              Name 210  "shininess"
+                              Name 223  "TDLighting(vf3;vf3;vf3;i1;vf3;vf3;vf3;f1;f1;"
+                              Name 214  "diffuseContrib"
+                              Name 215  "specularContrib"
+                              Name 216  "specularContrib2"
+                              Name 217  "index"
+                              Name 218  "worldSpacePos"
+                              Name 219  "normal"
+                              Name 220  "camVector"
+                              Name 221  "shininess"
+                              Name 222  "shininess2"
+                              Name 233  "TDLighting(vf3;vf3;i1;vf3;vf3;vf3;f1;"
+                              Name 226  "diffuseContrib"
+                              Name 227  "specularContrib"
+                              Name 228  "index"
+                              Name 229  "worldSpacePos"
+                              Name 230  "normal"
+                              Name 231  "camVector"
+                              Name 232  "shininess"
+                              Name 240  "TDLighting(vf3;i1;vf3;vf3;"
+                              Name 236  "diffuseContrib"
+                              Name 237  "index"
+                              Name 238  "worldSpacePos"
+                              Name 239  "normal"
+                              Name 249  "TDLighting(vf3;i1;vf3;vf3;f1;vf3;"
+                              Name 243  "diffuseContrib"
+                              Name 244  "index"
+                              Name 245  "worldSpacePos"
+                              Name 246  "normal"
+                              Name 247  "shadowStrength"
+                              Name 248  "shadowColor"
+                              Name 255  "TDProjMap(i1;vf3;vf4;"
+                              Name 252  "index"
+                              Name 253  "worldSpacePos"
+                              Name 254  "defaultColor"
+                              Name 261  "TDFog(vf4;vf3;i1;"
+                              Name 258  "color"
+                              Name 259  "lightingSpacePosition"
+                              Name 260  "cameraIndex"
+                              Name 266  "TDFog(vf4;vf3;"
+                              Name 264  "color"
+                              Name 265  "lightingSpacePosition"
+                              Name 271  "TDInstanceTexCoord(i1;vf3;"
+                              Name 269  "index"
+                              Name 270  "t"
+                              Name 275  "TDInstanceActive(i1;"
+                              Name 274  "index"
+                              Name 281  "iTDInstanceTranslate(i1;b1;"
+                              Name 279  "index"
+                              Name 280  "instanceActive"
+                              Name 285  "TDInstanceTranslate(i1;"
+                              Name 284  "index"
+                              Name 290  "TDInstanceRotateMat(i1;"
+                              Name 289  "index"
+                              Name 293  "TDInstanceScale(i1;"
+                              Name 292  "index"
+                              Name 296  "TDInstancePivot(i1;"
+                              Name 295  "index"
+                              Name 299  "TDInstanceRotTo(i1;"
+                              Name 298  "index"
+                              Name 302  "TDInstanceRotUp(i1;"
+                              Name 301  "index"
+                              Name 307  "TDInstanceMat(i1;"
+                              Name 306  "id"
+                              Name 310  "TDInstanceMat3(i1;"
+                              Name 309  "id"
+                              Name 313  "TDInstanceMat3ForNorm(i1;"
+                              Name 312  "id"
+                              Name 318  "TDInstanceColor(i1;vf4;"
+                              Name 316  "index"
+                              Name 317  "curColor"
+                              Name 321  "TDOutputSwizzle(vf4;"
+                              Name 320  "c"
+                              Name 327  "TDOutputSwizzle(vu4;"
+                              Name 326  "c"
+                              Name 330  "outcol"
+                              Name 333  "texCoord0"
+                              Name 334  "Vertex"
+                              MemberName 334(Vertex) 0  "color"
+                              MemberName 334(Vertex) 1  "worldSpacePos"
+                              MemberName 334(Vertex) 2  "texCoord0"
+                              MemberName 334(Vertex) 3  "cameraIndex"
+                              MemberName 334(Vertex) 4  "instance"
+                              Name 336  "iVert"
+                              Name 341  "actualTexZ"
+                              Name 349  "instanceLoop"
+                              Name 359  "colorMapColor"
+                              Name 363  "sColorMap"
+                              Name 367  "red"
+                              Name 374  "gl_DefaultUniformBlock"
+                              MemberName 374(gl_DefaultUniformBlock) 0  "uTDInstanceIDOffset"
+                              MemberName 374(gl_DefaultUniformBlock) 1  "uTDNumInstances"
+                              MemberName 374(gl_DefaultUniformBlock) 2  "uTDAlphaTestVal"
+                              MemberName 374(gl_DefaultUniformBlock) 3  "uConstant"
+                              MemberName 374(gl_DefaultUniformBlock) 4  "uShadowStrength"
+                              MemberName 374(gl_DefaultUniformBlock) 5  "uShadowColor"
+                              MemberName 374(gl_DefaultUniformBlock) 6  "uDiffuseColor"
+                              MemberName 374(gl_DefaultUniformBlock) 7  "uAmbientColor"
+                              Name 376  ""
+                              Name 401  "alpha"
+                              Name 409  "param"
+                              Name 422  "param"
+                              Name 429  "oFragColor"
+                              Name 430  "param"
+                              Name 435  "i"
+                              Name 452  "d"
+                              Name 456  "sTDNoiseMap"
+                              Name 458  "gl_FragCoord"
+                              Name 485  "gl_FrontFacing"
+                              Name 555  "param"
+                              Name 561  "a"
+                              Name 563  "phi"
+                              Name 568  "cosTheta"
+                              Name 582  "sinTheta"
+                              Name 588  "H"
+                              Name 601  "upVector"
+                              Name 612  "tangentX"
+                              Name 617  "tangentY"
+                              Name 621  "worldResult"
+                              Name 639  "NdotH"
+                              Name 645  "alpha2"
+                              Name 649  "denom"
+                              Name 686  "Gl"
+                              Name 694  "Gv"
+                              Name 708  "res"
+                              Name 712  "res"
+                              Name 713  "param"
+                              Name 715  "param"
+                              Name 717  "param"
+                              Name 719  "param"
+                              Name 721  "param"
+                              Name 723  "param"
+                              Name 725  "param"
+                              Name 727  "param"
+                              Name 729  "param"
+                              Name 738  "res"
+                              Name 739  "param"
+                              Name 741  "param"
+                              Name 743  "param"
+                              Name 745  "param"
+                              Name 747  "param"
+                              Name 749  "param"
+                              Name 751  "param"
+                              Name 753  "param"
+                              Name 755  "param"
+                              Name 762  "res"
+                              Name 766  "res"
+                              Name 767  "param"
+                              Name 769  "param"
+                              Name 771  "param"
+                              Name 773  "param"
+                              Name 775  "param"
+                              Name 777  "param"
+                              Name 779  "param"
+                              Name 790  "res"
+                              Name 804  "res"
+                              Name 822  "res"
+                              Name 838  "res"
+                              Name 852  "res"
+                              Name 868  "res"
+                              Name 882  "res"
+                              Name 894  "res"
+                              Name 917  "param"
+                              Name 919  "param"
+                              Name 921  "param"
+                              Name 925  "coord"
+                              Name 927  "samp"
+                              Name 931  "sTDInstanceTexCoord"
+                              Name 936  "v"
+                              Name 955  "coord"
+                              Name 957  "samp"
+                              Name 958  "sTDInstanceT"
+                              Name 963  "v"
+                              Name 970  "origIndex"
+                              Name 976  "coord"
+                              Name 978  "samp"
+                              Name 983  "v"
+                              Name 1003  "coord"
+                              Name 1005  "samp"
+                              Name 1010  "v"
+                              Name 1027  "v"
+                              Name 1029  "m"
+                              Name 1039  "v"
+                              Name 1047  "v"
+                              Name 1055  "v"
+                              Name 1063  "v"
+                              Name 1067  "instanceActive"
+                              Name 1069  "t"
+                              Name 1070  "param"
+                              Name 1072  "param"
+                              Name 1082  "m"
+                              Name 1088  "tt"
+                              Name 1201  "m"
+                              Name 1205  "m"
+                              Name 1206  "param"
+                              Name 1216  "coord"
+                              Name 1218  "samp"
+                              Name 1219  "sTDInstanceColor"
+                              Name 1224  "v"
+                              Name 1253  "TDMatrix"
+                              MemberName 1253(TDMatrix) 0  "world"
+                              MemberName 1253(TDMatrix) 1  "worldInverse"
+                              MemberName 1253(TDMatrix) 2  "worldCam"
+                              MemberName 1253(TDMatrix) 3  "worldCamInverse"
+                              MemberName 1253(TDMatrix) 4  "cam"
+                              MemberName 1253(TDMatrix) 5  "camInverse"
+                              MemberName 1253(TDMatrix) 6  "camProj"
+                              MemberName 1253(TDMatrix) 7  "camProjInverse"
+                              MemberName 1253(TDMatrix) 8  "proj"
+                              MemberName 1253(TDMatrix) 9  "projInverse"
+                              MemberName 1253(TDMatrix) 10  "worldCamProj"
+                              MemberName 1253(TDMatrix) 11  "worldCamProjInverse"
+                              MemberName 1253(TDMatrix) 12  "quadReproject"
+                              MemberName 1253(TDMatrix) 13  "worldForNormals"
+                              MemberName 1253(TDMatrix) 14  "camForNormals"
+                              MemberName 1253(TDMatrix) 15  "worldCamForNormals"
+                              Name 1255  "TDMatricesBlock"
+                              MemberName 1255(TDMatricesBlock) 0  "uTDMats"
+                              Name 1257  ""
+                              Name 1258  "TDCameraInfo"
+                              MemberName 1258(TDCameraInfo) 0  "nearFar"
+                              MemberName 1258(TDCameraInfo) 1  "fog"
+                              MemberName 1258(TDCameraInfo) 2  "fogColor"
+                              MemberName 1258(TDCameraInfo) 3  "renderTOPCameraIndex"
+                              Name 1260  "TDCameraInfoBlock"
+                              MemberName 1260(TDCameraInfoBlock) 0  "uTDCamInfos"
+                              Name 1262  ""
+                              Name 1263  "TDGeneral"
+                              MemberName 1263(TDGeneral) 0  "ambientColor"
+                              MemberName 1263(TDGeneral) 1  "nearFar"
+                              MemberName 1263(TDGeneral) 2  "viewport"
+                              MemberName 1263(TDGeneral) 3  "viewportRes"
+                              MemberName 1263(TDGeneral) 4  "fog"
+                              MemberName 1263(TDGeneral) 5  "fogColor"
+                              Name 1264  "TDGeneralBlock"
+                              MemberName 1264(TDGeneralBlock) 0  "uTDGeneral"
+                              Name 1266  ""
+                              Name 1270  "sTDSineLookup"
+                              Name 1271  "sTDWhite2D"
+                              Name 1275  "sTDWhite3D"
+                              Name 1276  "sTDWhite2DArray"
+                              Name 1280  "sTDWhiteCube"
+                              Name 1281  "TDLight"
+                              MemberName 1281(TDLight) 0  "position"
+                              MemberName 1281(TDLight) 1  "direction"
+                              MemberName 1281(TDLight) 2  "diffuse"
+                              MemberName 1281(TDLight) 3  "nearFar"
+                              MemberName 1281(TDLight) 4  "lightSize"
+                              MemberName 1281(TDLight) 5  "misc"
+                              MemberName 1281(TDLight) 6  "coneLookupScaleBias"
+                              MemberName 1281(TDLight) 7  "attenScaleBiasRoll"
+                              MemberName 1281(TDLight) 8  "shadowMapMatrix"
+                              MemberName 1281(TDLight) 9  "shadowMapCamMatrix"
+                              MemberName 1281(TDLight) 10  "shadowMapRes"
+                              MemberName 1281(TDLight) 11  "projMapMatrix"
+                              Name 1283  "TDLightBlock"
+                              MemberName 1283(TDLightBlock) 0  "uTDLights"
+                              Name 1285  ""
+                              Name 1286  "TDEnvLight"
+                              MemberName 1286(TDEnvLight) 0  "color"
+                              MemberName 1286(TDEnvLight) 1  "rotate"
+                              Name 1288  "TDEnvLightBlock"
+                              MemberName 1288(TDEnvLightBlock) 0  "uTDEnvLights"
+                              Name 1290  ""
+                              Name 1293  "TDEnvLightBuffer"
+                              MemberName 1293(TDEnvLightBuffer) 0  "shCoeffs"
+                              Name 1296  "uTDEnvLightBuffers"
+                              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
+                              MemberDecorate 374(gl_DefaultUniformBlock) 0 Offset 0
+                              MemberDecorate 374(gl_DefaultUniformBlock) 1 Offset 4
+                              MemberDecorate 374(gl_DefaultUniformBlock) 2 Offset 8
+                              MemberDecorate 374(gl_DefaultUniformBlock) 3 Offset 16
+                              MemberDecorate 374(gl_DefaultUniformBlock) 4 Offset 28
+                              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 429(oFragColor) Location 0
+                              Decorate 456(sTDNoiseMap) DescriptorSet 0
+                              Decorate 456(sTDNoiseMap) Binding 3
+                              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 958(sTDInstanceT) Binding 15
+                              Decorate 1219(sTDInstanceColor) DescriptorSet 0
+                              Decorate 1219(sTDInstanceColor) Binding 17
+                              MemberDecorate 1253(TDMatrix) 0 ColMajor
+                              MemberDecorate 1253(TDMatrix) 0 Offset 0
+                              MemberDecorate 1253(TDMatrix) 0 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 1 ColMajor
+                              MemberDecorate 1253(TDMatrix) 1 Offset 64
+                              MemberDecorate 1253(TDMatrix) 1 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 2 ColMajor
+                              MemberDecorate 1253(TDMatrix) 2 Offset 128
+                              MemberDecorate 1253(TDMatrix) 2 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 3 ColMajor
+                              MemberDecorate 1253(TDMatrix) 3 Offset 192
+                              MemberDecorate 1253(TDMatrix) 3 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 4 ColMajor
+                              MemberDecorate 1253(TDMatrix) 4 Offset 256
+                              MemberDecorate 1253(TDMatrix) 4 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 5 ColMajor
+                              MemberDecorate 1253(TDMatrix) 5 Offset 320
+                              MemberDecorate 1253(TDMatrix) 5 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 6 ColMajor
+                              MemberDecorate 1253(TDMatrix) 6 Offset 384
+                              MemberDecorate 1253(TDMatrix) 6 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 7 ColMajor
+                              MemberDecorate 1253(TDMatrix) 7 Offset 448
+                              MemberDecorate 1253(TDMatrix) 7 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 8 ColMajor
+                              MemberDecorate 1253(TDMatrix) 8 Offset 512
+                              MemberDecorate 1253(TDMatrix) 8 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 9 ColMajor
+                              MemberDecorate 1253(TDMatrix) 9 Offset 576
+                              MemberDecorate 1253(TDMatrix) 9 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 10 ColMajor
+                              MemberDecorate 1253(TDMatrix) 10 Offset 640
+                              MemberDecorate 1253(TDMatrix) 10 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 11 ColMajor
+                              MemberDecorate 1253(TDMatrix) 11 Offset 704
+                              MemberDecorate 1253(TDMatrix) 11 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 12 ColMajor
+                              MemberDecorate 1253(TDMatrix) 12 Offset 768
+                              MemberDecorate 1253(TDMatrix) 12 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 13 ColMajor
+                              MemberDecorate 1253(TDMatrix) 13 Offset 832
+                              MemberDecorate 1253(TDMatrix) 13 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 14 ColMajor
+                              MemberDecorate 1253(TDMatrix) 14 Offset 880
+                              MemberDecorate 1253(TDMatrix) 14 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 15 ColMajor
+                              MemberDecorate 1253(TDMatrix) 15 Offset 928
+                              MemberDecorate 1253(TDMatrix) 15 MatrixStride 16
+                              Decorate 1254 ArrayStride 976
+                              MemberDecorate 1255(TDMatricesBlock) 0 Offset 0
+                              Decorate 1255(TDMatricesBlock) Block
+                              Decorate 1257 DescriptorSet 0
+                              Decorate 1257 Binding 1
+                              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
+                              Decorate 1262 Binding 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
+                              Decorate 1266 Binding 0
+                              Decorate 1270(sTDSineLookup) DescriptorSet 0
+                              Decorate 1270(sTDSineLookup) Binding 0
+                              Decorate 1271(sTDWhite2D) DescriptorSet 0
+                              Decorate 1271(sTDWhite2D) Binding 0
+                              Decorate 1275(sTDWhite3D) DescriptorSet 0
+                              Decorate 1275(sTDWhite3D) Binding 0
+                              Decorate 1276(sTDWhite2DArray) DescriptorSet 0
+                              Decorate 1276(sTDWhite2DArray) Binding 0
+                              Decorate 1280(sTDWhiteCube) DescriptorSet 0
+                              Decorate 1280(sTDWhiteCube) Binding 0
+                              MemberDecorate 1281(TDLight) 0 Offset 0
+                              MemberDecorate 1281(TDLight) 1 Offset 16
+                              MemberDecorate 1281(TDLight) 2 Offset 32
+                              MemberDecorate 1281(TDLight) 3 Offset 48
+                              MemberDecorate 1281(TDLight) 4 Offset 64
+                              MemberDecorate 1281(TDLight) 5 Offset 80
+                              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) 9 ColMajor
+                              MemberDecorate 1281(TDLight) 9 Offset 192
+                              MemberDecorate 1281(TDLight) 9 MatrixStride 16
+                              MemberDecorate 1281(TDLight) 10 Offset 256
+                              MemberDecorate 1281(TDLight) 11 ColMajor
+                              MemberDecorate 1281(TDLight) 11 Offset 272
+                              MemberDecorate 1281(TDLight) 11 MatrixStride 16
+                              Decorate 1282 ArrayStride 336
+                              MemberDecorate 1283(TDLightBlock) 0 Offset 0
+                              Decorate 1283(TDLightBlock) Block
+                              Decorate 1285 DescriptorSet 0
+                              Decorate 1285 Binding 0
+                              MemberDecorate 1286(TDEnvLight) 0 Offset 0
+                              MemberDecorate 1286(TDEnvLight) 1 ColMajor
+                              MemberDecorate 1286(TDEnvLight) 1 Offset 16
+                              MemberDecorate 1286(TDEnvLight) 1 MatrixStride 16
+                              Decorate 1287 ArrayStride 64
+                              MemberDecorate 1288(TDEnvLightBlock) 0 Offset 0
+                              Decorate 1288(TDEnvLightBlock) Block
+                              Decorate 1290 DescriptorSet 0
+                              Decorate 1290 Binding 0
+                              Decorate 1292 ArrayStride 16
+                              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) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              20:             TypeVector 6(float) 3
+              21:             TypePointer Function 20(fvec3)
+              22:             TypeBool
+              23:             TypeFunction 22(bool) 21(ptr) 21(ptr)
+              28:             TypeInt 32 1
+              29:             TypePointer Function 28(int)
+              30:             TypePointer Function 6(float)
+              31:             TypeFunction 6(float) 29(ptr) 30(ptr)
+              36:             TypeFunction 2 30(ptr)
+              40:             TypeFunction 6(float) 29(ptr) 21(ptr)
+              45:             TypeFunction 6(float) 29(ptr) 21(ptr) 29(ptr) 29(ptr)
+              60:             TypeInt 32 0
+              61:             TypePointer Function 60(int)
+              62:             TypeFunction 6(float) 61(ptr)
+              66:             TypeVector 6(float) 2
+              67:             TypeFunction 66(fvec2) 61(ptr) 61(ptr)
+              72:             TypePointer Function 66(fvec2)
+              73:             TypeFunction 20(fvec3) 72(ptr) 30(ptr) 21(ptr)
+              79:             TypeFunction 6(float) 21(ptr) 21(ptr) 30(ptr)
+              85:             TypeFunction 20(fvec3) 21(ptr) 30(ptr)
+              90:             TypeFunction 6(float) 30(ptr) 30(ptr) 30(ptr)
+ 96(TDPBRResult):             TypeStruct 20(fvec3) 20(fvec3) 6(float)
+              97:             TypeFunction 96(TDPBRResult) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr)
+             109:             TypeFunction 2 21(ptr) 21(ptr) 30(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr)
+             124:             TypeFunction 2 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr)
+             138:             TypeFunction 96(TDPBRResult) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr)
+             148:             TypeFunction 2 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr)
+160(TDPhongResult):             TypeStruct 20(fvec3) 20(fvec3) 20(fvec3) 6(float)
+             161:             TypeFunction 160(TDPhongResult) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr)
+             172:             TypeFunction 2 21(ptr) 21(ptr) 21(ptr) 30(ptr) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr)
+             187:             TypeFunction 2 21(ptr) 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr)
+             201:             TypeFunction 2 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr)
+             213:             TypeFunction 2 21(ptr) 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr)
+             225:             TypeFunction 2 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr)
+             235:             TypeFunction 2 21(ptr) 29(ptr) 21(ptr) 21(ptr)
+             242:             TypeFunction 2 21(ptr) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr)
+             251:             TypeFunction 7(fvec4) 29(ptr) 21(ptr) 8(ptr)
+             257:             TypeFunction 7(fvec4) 8(ptr) 21(ptr) 29(ptr)
+             263:             TypeFunction 7(fvec4) 8(ptr) 21(ptr)
+             268:             TypeFunction 20(fvec3) 29(ptr) 21(ptr)
+             273:             TypeFunction 22(bool) 29(ptr)
+             277:             TypePointer Function 22(bool)
+             278:             TypeFunction 20(fvec3) 29(ptr) 277(ptr)
+             283:             TypeFunction 20(fvec3) 29(ptr)
+             287:             TypeMatrix 20(fvec3) 3
+             288:             TypeFunction 287 29(ptr)
+             304:             TypeMatrix 7(fvec4) 4
+             305:             TypeFunction 304 29(ptr)
+             315:             TypeFunction 7(fvec4) 29(ptr) 8(ptr)
+             323:             TypeVector 60(int) 4
+             324:             TypePointer Function 323(ivec4)
+             325:             TypeFunction 323(ivec4) 324(ptr)
+             331:    6(float) Constant 0
+             332:    7(fvec4) ConstantComposite 331 331 331 331
+     334(Vertex):             TypeStruct 7(fvec4) 20(fvec3) 20(fvec3) 28(int) 28(int)
+             335:             TypePointer Input 334(Vertex)
+      336(iVert):    335(ptr) Variable Input
+             337:     28(int) Constant 2
+             338:             TypePointer Input 20(fvec3)
+             342:     60(int) Constant 2
+             347:    6(float) Constant 1157627904
+             353:     28(int) Constant 2048
+             360:             TypeImage 6(float) 2D array sampled format:Unknown
+             361:             TypeSampledImage 360
+             362:             TypePointer UniformConstant 361
+  363(sColorMap):    362(ptr) Variable UniformConstant
+374(gl_DefaultUniformBlock):             TypeStruct 28(int) 28(int) 6(float) 20(fvec3) 6(float) 20(fvec3) 7(fvec4) 7(fvec4)
+             375:             TypePointer Uniform 374(gl_DefaultUniformBlock)
+             376:    375(ptr) Variable Uniform
+             377:     28(int) Constant 3
+             378:             TypePointer Uniform 20(fvec3)
+             381:     28(int) Constant 0
+             382:             TypePointer Input 7(fvec4)
+             390:     60(int) Constant 0
+             393:     60(int) Constant 1
+             402:     60(int) Constant 3
+             403:             TypePointer Input 6(float)
+             427:             TypeArray 7(fvec4) 393
+             428:             TypePointer Output 427
+ 429(oFragColor):    428(ptr) Variable Output
+             433:             TypePointer Output 7(fvec4)
+             436:     28(int) Constant 1
+             453:             TypeImage 6(float) 2D sampled format:Unknown
+             454:             TypeSampledImage 453
+             455:             TypePointer UniformConstant 454
+456(sTDNoiseMap):    455(ptr) Variable UniformConstant
+458(gl_FragCoord):    382(ptr) Variable Input
+             461:    6(float) Constant 1132462080
+             466:    6(float) Constant 1056964608
+             484:             TypePointer Input 22(bool)
+485(gl_FrontFacing):    484(ptr) Variable Input
+             489:    6(float) Constant 1065353216
+             501:     60(int) Constant 16
+             507:     60(int) Constant 1431655765
+             511:     60(int) Constant 2863311530
+             516:     60(int) Constant 858993459
+             520:     60(int) Constant 3435973836
+             525:     60(int) Constant 252645135
+             527:     60(int) Constant 4
+             530:     60(int) Constant 4042322160
+             535:     60(int) Constant 16711935
+             537:     60(int) Constant 8
+             540:     60(int) Constant 4278255360
+             546:    6(float) Constant 796917760
+             564:    6(float) Constant 1086918619
+             605:    6(float) Constant 1065336439
+             607:   20(fvec3) ConstantComposite 331 331 489
+             608:   20(fvec3) ConstantComposite 489 331 331
+             609:             TypeVector 22(bool) 3
+             643:    6(float) Constant 897988541
+             657:    6(float) Constant 841731191
+             661:    6(float) Constant 1078530011
+             670:   20(fvec3) ConstantComposite 489 489 489
+             673:    6(float) Constant 1073741824
+             674:    6(float) Constant 3232874585
+             677:    6(float) Constant 1088386572
+             707:             TypePointer Function 96(TDPBRResult)
+             789:             TypePointer Function 160(TDPhongResult)
+             791:   20(fvec3) ConstantComposite 331 331 331
+             928:             TypeImage 6(float) Buffer sampled format:Unknown
+             929:             TypeSampledImage 928
+             930:             TypePointer UniformConstant 929
+931(sTDInstanceTexCoord):    930(ptr) Variable UniformConstant
+             950:             TypePointer Uniform 28(int)
+958(sTDInstanceT):    930(ptr) Variable UniformConstant
+            1028:             TypePointer Function 287
+            1030:   20(fvec3) ConstantComposite 331 489 331
+            1031:         287 ConstantComposite 608 1030 607
+            1068:    22(bool) ConstantTrue
+            1079:         304 ConstantComposite 332 332 332 332
+            1081:             TypePointer Function 304
+            1083:    7(fvec4) ConstantComposite 489 331 331 331
+            1084:    7(fvec4) ConstantComposite 331 489 331 331
+            1085:    7(fvec4) ConstantComposite 331 331 489 331
+            1086:    7(fvec4) ConstantComposite 331 331 331 489
+            1087:         304 ConstantComposite 1083 1084 1085 1086
+1219(sTDInstanceColor):    930(ptr) Variable UniformConstant
+  1253(TDMatrix):             TypeStruct 304 304 304 304 304 304 304 304 304 304 304 304 304 287 287 287
+            1254:             TypeArray 1253(TDMatrix) 393
+1255(TDMatricesBlock):             TypeStruct 1254
+            1256:             TypePointer Uniform 1255(TDMatricesBlock)
+            1257:   1256(ptr) Variable Uniform
+1258(TDCameraInfo):             TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 28(int)
+            1259:             TypeArray 1258(TDCameraInfo) 393
+1260(TDCameraInfoBlock):             TypeStruct 1259
+            1261:             TypePointer Uniform 1260(TDCameraInfoBlock)
+            1262:   1261(ptr) Variable Uniform
+ 1263(TDGeneral):             TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4)
+1264(TDGeneralBlock):             TypeStruct 1263(TDGeneral)
+            1265:             TypePointer Uniform 1264(TDGeneralBlock)
+            1266:   1265(ptr) Variable Uniform
+            1267:             TypeImage 6(float) 1D sampled format:Unknown
+            1268:             TypeSampledImage 1267
+            1269:             TypePointer UniformConstant 1268
+1270(sTDSineLookup):   1269(ptr) Variable UniformConstant
+1271(sTDWhite2D):    455(ptr) Variable UniformConstant
+            1272:             TypeImage 6(float) 3D sampled format:Unknown
+            1273:             TypeSampledImage 1272
+            1274:             TypePointer UniformConstant 1273
+1275(sTDWhite3D):   1274(ptr) Variable UniformConstant
+1276(sTDWhite2DArray):    362(ptr) Variable UniformConstant
+            1277:             TypeImage 6(float) Cube sampled format:Unknown
+            1278:             TypeSampledImage 1277
+            1279:             TypePointer UniformConstant 1278
+1280(sTDWhiteCube):   1279(ptr) Variable UniformConstant
+   1281(TDLight):             TypeStruct 7(fvec4) 20(fvec3) 20(fvec3) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 304 304 7(fvec4) 304
+            1282:             TypeArray 1281(TDLight) 393
+1283(TDLightBlock):             TypeStruct 1282
+            1284:             TypePointer Uniform 1283(TDLightBlock)
+            1285:   1284(ptr) Variable Uniform
+1286(TDEnvLight):             TypeStruct 20(fvec3) 287
+            1287:             TypeArray 1286(TDEnvLight) 393
+1288(TDEnvLightBlock):             TypeStruct 1287
+            1289:             TypePointer Uniform 1288(TDEnvLightBlock)
+            1290:   1289(ptr) Variable Uniform
+            1291:     60(int) Constant 9
+            1292:             TypeArray 20(fvec3) 1291
+1293(TDEnvLightBuffer):             TypeStruct 1292
+            1294:             TypeArray 1293(TDEnvLightBuffer) 393
+            1295:             TypePointer Uniform 1294
+1296(uTDEnvLightBuffers):   1295(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+     330(outcol):      8(ptr) Variable Function
+  333(texCoord0):     21(ptr) Variable Function
+ 341(actualTexZ):     30(ptr) Variable Function
+349(instanceLoop):     30(ptr) Variable Function
+359(colorMapColor):      8(ptr) Variable Function
+        367(red):     30(ptr) Variable Function
+      401(alpha):     30(ptr) Variable Function
+      409(param):      8(ptr) Variable Function
+      422(param):     30(ptr) Variable Function
+      430(param):      8(ptr) Variable Function
+          435(i):     29(ptr) Variable Function
+             329:           2 FunctionCall 15(TDCheckDiscard()
+                              Store 330(outcol) 332
+             339:    338(ptr) AccessChain 336(iVert) 337
+             340:   20(fvec3) Load 339
+                              Store 333(texCoord0) 340
+             343:     30(ptr) AccessChain 333(texCoord0) 342
+             344:    6(float) Load 343
+             345:     28(int) ConvertFToS 344
+             346:    6(float) ConvertSToF 345
+             348:    6(float) FMod 346 347
+                              Store 341(actualTexZ) 348
+             350:     30(ptr) AccessChain 333(texCoord0) 342
+             351:    6(float) Load 350
+             352:     28(int) ConvertFToS 351
+             354:     28(int) SDiv 352 353
+             355:    6(float) ConvertSToF 354
+             356:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 355
+                              Store 349(instanceLoop) 356
+             357:    6(float) Load 341(actualTexZ)
+             358:     30(ptr) AccessChain 333(texCoord0) 342
+                              Store 358 357
+             364:         361 Load 363(sColorMap)
+             365:   20(fvec3) Load 333(texCoord0)
+             366:    7(fvec4) ImageSampleImplicitLod 364 365
+                              Store 359(colorMapColor) 366
+             368:    6(float) Load 349(instanceLoop)
+             369:     28(int) ConvertFToS 368
+             370:     30(ptr) AccessChain 359(colorMapColor) 369
+             371:    6(float) Load 370
+                              Store 367(red) 371
+             372:    6(float) Load 367(red)
+             373:    7(fvec4) CompositeConstruct 372 372 372 372
+                              Store 359(colorMapColor) 373
+             379:    378(ptr) AccessChain 376 377
+             380:   20(fvec3) Load 379
+             383:    382(ptr) AccessChain 336(iVert) 381
+             384:    7(fvec4) Load 383
+             385:   20(fvec3) VectorShuffle 384 384 0 1 2
+             386:   20(fvec3) FMul 380 385
+             387:    7(fvec4) Load 330(outcol)
+             388:   20(fvec3) VectorShuffle 387 387 0 1 2
+             389:   20(fvec3) FAdd 388 386
+             391:     30(ptr) AccessChain 330(outcol) 390
+             392:    6(float) CompositeExtract 389 0
+                              Store 391 392
+             394:     30(ptr) AccessChain 330(outcol) 393
+             395:    6(float) CompositeExtract 389 1
+                              Store 394 395
+             396:     30(ptr) AccessChain 330(outcol) 342
+             397:    6(float) CompositeExtract 389 2
+                              Store 396 397
+             398:    7(fvec4) Load 359(colorMapColor)
+             399:    7(fvec4) Load 330(outcol)
+             400:    7(fvec4) FMul 399 398
+                              Store 330(outcol) 400
+             404:    403(ptr) AccessChain 336(iVert) 381 402
+             405:    6(float) Load 404
+             406:     30(ptr) AccessChain 359(colorMapColor) 402
+             407:    6(float) Load 406
+             408:    6(float) FMul 405 407
+                              Store 401(alpha) 408
+             410:    7(fvec4) Load 330(outcol)
+                              Store 409(param) 410
+             411:    7(fvec4) FunctionCall 18(TDDither(vf4;) 409(param)
+                              Store 330(outcol) 411
+             412:    6(float) Load 401(alpha)
+             413:    7(fvec4) Load 330(outcol)
+             414:   20(fvec3) VectorShuffle 413 413 0 1 2
+             415:   20(fvec3) VectorTimesScalar 414 412
+             416:     30(ptr) AccessChain 330(outcol) 390
+             417:    6(float) CompositeExtract 415 0
+                              Store 416 417
+             418:     30(ptr) AccessChain 330(outcol) 393
+             419:    6(float) CompositeExtract 415 1
+                              Store 418 419
+             420:     30(ptr) AccessChain 330(outcol) 342
+             421:    6(float) CompositeExtract 415 2
+                              Store 420 421
+             423:    6(float) Load 401(alpha)
+                              Store 422(param) 423
+             424:           2 FunctionCall 38(TDAlphaTest(f1;) 422(param)
+             425:    6(float) Load 401(alpha)
+             426:     30(ptr) AccessChain 330(outcol) 402
+                              Store 426 425
+             431:    7(fvec4) Load 330(outcol)
+                              Store 430(param) 431
+             432:    7(fvec4) FunctionCall 321(TDOutputSwizzle(vf4;) 430(param)
+             434:    433(ptr) AccessChain 429(oFragColor) 381
+                              Store 434 432
+                              Store 435(i) 436
+                              Branch 437
+             437:             Label
+                              LoopMerge 439 440 None
+                              Branch 441
+             441:             Label
+             442:     28(int) Load 435(i)
+             443:    22(bool) SLessThan 442 436
+                              BranchConditional 443 438 439
+             438:               Label
+             444:     28(int)   Load 435(i)
+             445:    433(ptr)   AccessChain 429(oFragColor) 444
+                                Store 445 332
+                                Branch 440
+             440:               Label
+             446:     28(int)   Load 435(i)
+             447:     28(int)   IAdd 446 436
+                                Store 435(i) 447
+                                Branch 437
+             439:             Label
+                              Return
+                              FunctionEnd
+11(TDColor(vf4;):    7(fvec4) Function None 9
+       10(color):      8(ptr) FunctionParameter
+              12:             Label
+             448:    7(fvec4) Load 10(color)
+                              ReturnValue 448
+                              FunctionEnd
+13(TDCheckOrderIndTrans():           2 Function None 3
+              14:             Label
+                              Return
+                              FunctionEnd
+15(TDCheckDiscard():           2 Function None 3
+              16:             Label
+             451:           2 FunctionCall 13(TDCheckOrderIndTrans()
+                              Return
+                              FunctionEnd
+18(TDDither(vf4;):    7(fvec4) Function None 9
+       17(color):      8(ptr) FunctionParameter
+              19:             Label
+          452(d):     30(ptr) Variable Function
+             457:         454 Load 456(sTDNoiseMap)
+             459:    7(fvec4) Load 458(gl_FragCoord)
+             460:   66(fvec2) VectorShuffle 459 459 0 1
+             462:   66(fvec2) CompositeConstruct 461 461
+             463:   66(fvec2) FDiv 460 462
+             464:    7(fvec4) ImageSampleImplicitLod 457 463
+             465:    6(float) CompositeExtract 464 0
+                              Store 452(d) 465
+             467:    6(float) Load 452(d)
+             468:    6(float) FSub 467 466
+                              Store 452(d) 468
+             469:    6(float) Load 452(d)
+             470:    6(float) FDiv 469 461
+                              Store 452(d) 470
+             471:    7(fvec4) Load 17(color)
+             472:   20(fvec3) VectorShuffle 471 471 0 1 2
+             473:    6(float) Load 452(d)
+             474:   20(fvec3) CompositeConstruct 473 473 473
+             475:   20(fvec3) FAdd 472 474
+             476:     30(ptr) AccessChain 17(color) 402
+             477:    6(float) Load 476
+             478:    6(float) CompositeExtract 475 0
+             479:    6(float) CompositeExtract 475 1
+             480:    6(float) CompositeExtract 475 2
+             481:    7(fvec4) CompositeConstruct 478 479 480 477
+                              ReturnValue 481
+                              FunctionEnd
+26(TDFrontFacing(vf3;vf3;):    22(bool) Function None 23
+         24(pos):     21(ptr) FunctionParameter
+      25(normal):     21(ptr) FunctionParameter
+              27:             Label
+             486:    22(bool) Load 485(gl_FrontFacing)
+                              ReturnValue 486
+                              FunctionEnd
+34(TDAttenuateLight(i1;f1;):    6(float) Function None 31
+       32(index):     29(ptr) FunctionParameter
+   33(lightDist):     30(ptr) FunctionParameter
+              35:             Label
+                              ReturnValue 489
+                              FunctionEnd
+38(TDAlphaTest(f1;):           2 Function None 36
+       37(alpha):     30(ptr) FunctionParameter
+              39:             Label
+                              Return
+                              FunctionEnd
+43(TDHardShadow(i1;vf3;):    6(float) Function None 40
+  41(lightIndex):     29(ptr) FunctionParameter
+42(worldSpacePos):     21(ptr) FunctionParameter
+              44:             Label
+                              ReturnValue 331
+                              FunctionEnd
+50(TDSoftShadow(i1;vf3;i1;i1;):    6(float) Function None 45
+  46(lightIndex):     29(ptr) FunctionParameter
+47(worldSpacePos):     21(ptr) FunctionParameter
+     48(samples):     29(ptr) FunctionParameter
+       49(steps):     29(ptr) FunctionParameter
+              51:             Label
+                              ReturnValue 331
+                              FunctionEnd
+54(TDSoftShadow(i1;vf3;):    6(float) Function None 40
+  52(lightIndex):     29(ptr) FunctionParameter
+53(worldSpacePos):     21(ptr) FunctionParameter
+              55:             Label
+                              ReturnValue 331
+                              FunctionEnd
+58(TDShadow(i1;vf3;):    6(float) Function None 40
+  56(lightIndex):     29(ptr) FunctionParameter
+57(worldSpacePos):     21(ptr) FunctionParameter
+              59:             Label
+                              ReturnValue 331
+                              FunctionEnd
+64(iTDRadicalInverse_VdC(u1;):    6(float) Function None 62
+        63(bits):     61(ptr) FunctionParameter
+              65:             Label
+             500:     60(int) Load 63(bits)
+             502:     60(int) ShiftLeftLogical 500 501
+             503:     60(int) Load 63(bits)
+             504:     60(int) ShiftRightLogical 503 501
+             505:     60(int) BitwiseOr 502 504
+                              Store 63(bits) 505
+             506:     60(int) Load 63(bits)
+             508:     60(int) BitwiseAnd 506 507
+             509:     60(int) ShiftLeftLogical 508 393
+             510:     60(int) Load 63(bits)
+             512:     60(int) BitwiseAnd 510 511
+             513:     60(int) ShiftRightLogical 512 393
+             514:     60(int) BitwiseOr 509 513
+                              Store 63(bits) 514
+             515:     60(int) Load 63(bits)
+             517:     60(int) BitwiseAnd 515 516
+             518:     60(int) ShiftLeftLogical 517 342
+             519:     60(int) Load 63(bits)
+             521:     60(int) BitwiseAnd 519 520
+             522:     60(int) ShiftRightLogical 521 342
+             523:     60(int) BitwiseOr 518 522
+                              Store 63(bits) 523
+             524:     60(int) Load 63(bits)
+             526:     60(int) BitwiseAnd 524 525
+             528:     60(int) ShiftLeftLogical 526 527
+             529:     60(int) Load 63(bits)
+             531:     60(int) BitwiseAnd 529 530
+             532:     60(int) ShiftRightLogical 531 527
+             533:     60(int) BitwiseOr 528 532
+                              Store 63(bits) 533
+             534:     60(int) Load 63(bits)
+             536:     60(int) BitwiseAnd 534 535
+             538:     60(int) ShiftLeftLogical 536 537
+             539:     60(int) Load 63(bits)
+             541:     60(int) BitwiseAnd 539 540
+             542:     60(int) ShiftRightLogical 541 537
+             543:     60(int) BitwiseOr 538 542
+                              Store 63(bits) 543
+             544:     60(int) Load 63(bits)
+             545:    6(float) ConvertUToF 544
+             547:    6(float) FMul 545 546
+                              ReturnValue 547
+                              FunctionEnd
+70(iTDHammersley(u1;u1;):   66(fvec2) Function None 67
+           68(i):     61(ptr) FunctionParameter
+           69(N):     61(ptr) FunctionParameter
+              71:             Label
+      555(param):     61(ptr) Variable Function
+             550:     60(int) Load 68(i)
+             551:    6(float) ConvertUToF 550
+             552:     60(int) Load 69(N)
+             553:    6(float) ConvertUToF 552
+             554:    6(float) FDiv 551 553
+             556:     60(int) Load 68(i)
+                              Store 555(param) 556
+             557:    6(float) FunctionCall 64(iTDRadicalInverse_VdC(u1;) 555(param)
+             558:   66(fvec2) CompositeConstruct 554 557
+                              ReturnValue 558
+                              FunctionEnd
+77(iTDImportanceSampleGGX(vf2;f1;vf3;):   20(fvec3) Function None 73
+          74(Xi):     72(ptr) FunctionParameter
+  75(roughness2):     30(ptr) FunctionParameter
+           76(N):     21(ptr) FunctionParameter
+              78:             Label
+          561(a):     30(ptr) Variable Function
+        563(phi):     30(ptr) Variable Function
+   568(cosTheta):     30(ptr) Variable Function
+   582(sinTheta):     30(ptr) Variable Function
+          588(H):     21(ptr) Variable Function
+   601(upVector):     21(ptr) Variable Function
+   612(tangentX):     21(ptr) Variable Function
+   617(tangentY):     21(ptr) Variable Function
+621(worldResult):     21(ptr) Variable Function
+             562:    6(float) Load 75(roughness2)
+                              Store 561(a) 562
+             565:     30(ptr) AccessChain 74(Xi) 390
+             566:    6(float) Load 565
+             567:    6(float) FMul 564 566
+                              Store 563(phi) 567
+             569:     30(ptr) AccessChain 74(Xi) 393
+             570:    6(float) Load 569
+             571:    6(float) FSub 489 570
+             572:    6(float) Load 561(a)
+             573:    6(float) Load 561(a)
+             574:    6(float) FMul 572 573
+             575:    6(float) FSub 574 489
+             576:     30(ptr) AccessChain 74(Xi) 393
+             577:    6(float) Load 576
+             578:    6(float) FMul 575 577
+             579:    6(float) FAdd 489 578
+             580:    6(float) FDiv 571 579
+             581:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 580
+                              Store 568(cosTheta) 581
+             583:    6(float) Load 568(cosTheta)
+             584:    6(float) Load 568(cosTheta)
+             585:    6(float) FMul 583 584
+             586:    6(float) FSub 489 585
+             587:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 586
+                              Store 582(sinTheta) 587
+             589:    6(float) Load 582(sinTheta)
+             590:    6(float) Load 563(phi)
+             591:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 590
+             592:    6(float) FMul 589 591
+             593:     30(ptr) AccessChain 588(H) 390
+                              Store 593 592
+             594:    6(float) Load 582(sinTheta)
+             595:    6(float) Load 563(phi)
+             596:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 595
+             597:    6(float) FMul 594 596
+             598:     30(ptr) AccessChain 588(H) 393
+                              Store 598 597
+             599:    6(float) Load 568(cosTheta)
+             600:     30(ptr) AccessChain 588(H) 342
+                              Store 600 599
+             602:     30(ptr) AccessChain 76(N) 342
+             603:    6(float) Load 602
+             604:    6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 603
+             606:    22(bool) FOrdLessThan 604 605
+             610:  609(bvec3) CompositeConstruct 606 606 606
+             611:   20(fvec3) Select 610 607 608
+                              Store 601(upVector) 611
+             613:   20(fvec3) Load 601(upVector)
+             614:   20(fvec3) Load 76(N)
+             615:   20(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 613 614
+             616:   20(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 615
+                              Store 612(tangentX) 616
+             618:   20(fvec3) Load 76(N)
+             619:   20(fvec3) Load 612(tangentX)
+             620:   20(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 618 619
+                              Store 617(tangentY) 620
+             622:   20(fvec3) Load 612(tangentX)
+             623:     30(ptr) AccessChain 588(H) 390
+             624:    6(float) Load 623
+             625:   20(fvec3) VectorTimesScalar 622 624
+             626:   20(fvec3) Load 617(tangentY)
+             627:     30(ptr) AccessChain 588(H) 393
+             628:    6(float) Load 627
+             629:   20(fvec3) VectorTimesScalar 626 628
+             630:   20(fvec3) FAdd 625 629
+             631:   20(fvec3) Load 76(N)
+             632:     30(ptr) AccessChain 588(H) 342
+             633:    6(float) Load 632
+             634:   20(fvec3) VectorTimesScalar 631 633
+             635:   20(fvec3) FAdd 630 634
+                              Store 621(worldResult) 635
+             636:   20(fvec3) Load 621(worldResult)
+                              ReturnValue 636
+                              FunctionEnd
+83(iTDDistributionGGX(vf3;vf3;f1;):    6(float) Function None 79
+      80(normal):     21(ptr) FunctionParameter
+ 81(half_vector):     21(ptr) FunctionParameter
+  82(roughness2):     30(ptr) FunctionParameter
+              84:             Label
+      639(NdotH):     30(ptr) Variable Function
+     645(alpha2):     30(ptr) Variable Function
+      649(denom):     30(ptr) Variable Function
+             640:   20(fvec3) Load 80(normal)
+             641:   20(fvec3) Load 81(half_vector)
+             642:    6(float) Dot 640 641
+             644:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 642 643 489
+                              Store 639(NdotH) 644
+             646:    6(float) Load 82(roughness2)
+             647:    6(float) Load 82(roughness2)
+             648:    6(float) FMul 646 647
+                              Store 645(alpha2) 648
+             650:    6(float) Load 639(NdotH)
+             651:    6(float) Load 639(NdotH)
+             652:    6(float) FMul 650 651
+             653:    6(float) Load 645(alpha2)
+             654:    6(float) FSub 653 489
+             655:    6(float) FMul 652 654
+             656:    6(float) FAdd 655 489
+                              Store 649(denom) 656
+             658:    6(float) Load 649(denom)
+             659:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 657 658
+                              Store 649(denom) 659
+             660:    6(float) Load 645(alpha2)
+             662:    6(float) Load 649(denom)
+             663:    6(float) FMul 661 662
+             664:    6(float) Load 649(denom)
+             665:    6(float) FMul 663 664
+             666:    6(float) FDiv 660 665
+                              ReturnValue 666
+                              FunctionEnd
+88(iTDCalcF(vf3;f1;):   20(fvec3) Function None 85
+          86(F0):     21(ptr) FunctionParameter
+       87(VdotH):     30(ptr) FunctionParameter
+              89:             Label
+             669:   20(fvec3) Load 86(F0)
+             671:   20(fvec3) Load 86(F0)
+             672:   20(fvec3) FSub 670 671
+             675:    6(float) Load 87(VdotH)
+             676:    6(float) FMul 674 675
+             678:    6(float) FSub 676 677
+             679:    6(float) Load 87(VdotH)
+             680:    6(float) FMul 678 679
+             681:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 673 680
+             682:   20(fvec3) VectorTimesScalar 672 681
+             683:   20(fvec3) FAdd 669 682
+                              ReturnValue 683
+                              FunctionEnd
+94(iTDCalcG(f1;f1;f1;):    6(float) Function None 90
+       91(NdotL):     30(ptr) FunctionParameter
+       92(NdotV):     30(ptr) FunctionParameter
+           93(k):     30(ptr) FunctionParameter
+              95:             Label
+         686(Gl):     30(ptr) Variable Function
+         694(Gv):     30(ptr) Variable Function
+             687:    6(float) Load 91(NdotL)
+             688:    6(float) Load 93(k)
+             689:    6(float) FSub 489 688
+             690:    6(float) FMul 687 689
+             691:    6(float) Load 93(k)
+             692:    6(float) FAdd 690 691
+             693:    6(float) FDiv 489 692
+                              Store 686(Gl) 693
+             695:    6(float) Load 92(NdotV)
+             696:    6(float) Load 93(k)
+             697:    6(float) FSub 489 696
+             698:    6(float) FMul 695 697
+             699:    6(float) Load 93(k)
+             700:    6(float) FAdd 698 699
+             701:    6(float) FDiv 489 700
+                              Store 694(Gv) 701
+             702:    6(float) Load 686(Gl)
+             703:    6(float) Load 694(Gv)
+             704:    6(float) FMul 702 703
+                              ReturnValue 704
+                              FunctionEnd
+107(TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;):96(TDPBRResult) Function None 97
+       98(index):     29(ptr) FunctionParameter
+99(diffuseColor):     21(ptr) FunctionParameter
+100(specularColor):     21(ptr) FunctionParameter
+101(worldSpacePos):     21(ptr) FunctionParameter
+     102(normal):     21(ptr) FunctionParameter
+103(shadowStrength):     30(ptr) FunctionParameter
+104(shadowColor):     21(ptr) FunctionParameter
+  105(camVector):     21(ptr) FunctionParameter
+  106(roughness):     30(ptr) FunctionParameter
+             108:             Label
+        708(res):    707(ptr) Variable Function
+             709:96(TDPBRResult) Load 708(res)
+                              ReturnValue 709
+                              FunctionEnd
+122(TDLightingPBR(vf3;vf3;f1;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;):           2 Function None 109
+110(diffuseContrib):     21(ptr) FunctionParameter
+111(specularContrib):     21(ptr) FunctionParameter
+112(shadowStrengthOut):     30(ptr) FunctionParameter
+      113(index):     29(ptr) FunctionParameter
+114(diffuseColor):     21(ptr) FunctionParameter
+115(specularColor):     21(ptr) FunctionParameter
+116(worldSpacePos):     21(ptr) FunctionParameter
+     117(normal):     21(ptr) FunctionParameter
+118(shadowStrength):     30(ptr) FunctionParameter
+119(shadowColor):     21(ptr) FunctionParameter
+  120(camVector):     21(ptr) FunctionParameter
+  121(roughness):     30(ptr) FunctionParameter
+             123:             Label
+        712(res):    707(ptr) Variable Function
+      713(param):     29(ptr) Variable Function
+      715(param):     21(ptr) Variable Function
+      717(param):     21(ptr) Variable Function
+      719(param):     21(ptr) Variable Function
+      721(param):     21(ptr) Variable Function
+      723(param):     30(ptr) Variable Function
+      725(param):     21(ptr) Variable Function
+      727(param):     21(ptr) Variable Function
+      729(param):     30(ptr) Variable Function
+             714:     28(int) Load 113(index)
+                              Store 713(param) 714
+             716:   20(fvec3) Load 114(diffuseColor)
+                              Store 715(param) 716
+             718:   20(fvec3) Load 115(specularColor)
+                              Store 717(param) 718
+             720:   20(fvec3) Load 116(worldSpacePos)
+                              Store 719(param) 720
+             722:   20(fvec3) Load 117(normal)
+                              Store 721(param) 722
+             724:    6(float) Load 118(shadowStrength)
+                              Store 723(param) 724
+             726:   20(fvec3) Load 119(shadowColor)
+                              Store 725(param) 726
+             728:   20(fvec3) Load 120(camVector)
+                              Store 727(param) 728
+             730:    6(float) Load 121(roughness)
+                              Store 729(param) 730
+             731:96(TDPBRResult) FunctionCall 107(TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;) 713(param) 715(param) 717(param) 719(param) 721(param) 723(param) 725(param) 727(param) 729(param)
+                              Store 712(res) 731
+             732:     21(ptr) AccessChain 712(res) 381
+             733:   20(fvec3) Load 732
+                              Store 110(diffuseContrib) 733
+             734:     21(ptr) AccessChain 712(res) 436
+             735:   20(fvec3) Load 734
+                              Store 111(specularContrib) 735
+             736:     30(ptr) AccessChain 712(res) 337
+             737:    6(float) Load 736
+                              Store 112(shadowStrengthOut) 737
+                              Return
+                              FunctionEnd
+136(TDLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;):           2 Function None 124
+125(diffuseContrib):     21(ptr) FunctionParameter
+126(specularContrib):     21(ptr) FunctionParameter
+      127(index):     29(ptr) FunctionParameter
+128(diffuseColor):     21(ptr) FunctionParameter
+129(specularColor):     21(ptr) FunctionParameter
+130(worldSpacePos):     21(ptr) FunctionParameter
+     131(normal):     21(ptr) FunctionParameter
+132(shadowStrength):     30(ptr) FunctionParameter
+133(shadowColor):     21(ptr) FunctionParameter
+  134(camVector):     21(ptr) FunctionParameter
+  135(roughness):     30(ptr) FunctionParameter
+             137:             Label
+        738(res):    707(ptr) Variable Function
+      739(param):     29(ptr) Variable Function
+      741(param):     21(ptr) Variable Function
+      743(param):     21(ptr) Variable Function
+      745(param):     21(ptr) Variable Function
+      747(param):     21(ptr) Variable Function
+      749(param):     30(ptr) Variable Function
+      751(param):     21(ptr) Variable Function
+      753(param):     21(ptr) Variable Function
+      755(param):     30(ptr) Variable Function
+             740:     28(int) Load 127(index)
+                              Store 739(param) 740
+             742:   20(fvec3) Load 128(diffuseColor)
+                              Store 741(param) 742
+             744:   20(fvec3) Load 129(specularColor)
+                              Store 743(param) 744
+             746:   20(fvec3) Load 130(worldSpacePos)
+                              Store 745(param) 746
+             748:   20(fvec3) Load 131(normal)
+                              Store 747(param) 748
+             750:    6(float) Load 132(shadowStrength)
+                              Store 749(param) 750
+             752:   20(fvec3) Load 133(shadowColor)
+                              Store 751(param) 752
+             754:   20(fvec3) Load 134(camVector)
+                              Store 753(param) 754
+             756:    6(float) Load 135(roughness)
+                              Store 755(param) 756
+             757:96(TDPBRResult) FunctionCall 107(TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;) 739(param) 741(param) 743(param) 745(param) 747(param) 749(param) 751(param) 753(param) 755(param)
+                              Store 738(res) 757
+             758:     21(ptr) AccessChain 738(res) 381
+             759:   20(fvec3) Load 758
+                              Store 125(diffuseContrib) 759
+             760:     21(ptr) AccessChain 738(res) 436
+             761:   20(fvec3) Load 760
+                              Store 126(specularContrib) 761
+                              Return
+                              FunctionEnd
+146(TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1;):96(TDPBRResult) Function None 138
+      139(index):     29(ptr) FunctionParameter
+140(diffuseColor):     21(ptr) FunctionParameter
+141(specularColor):     21(ptr) FunctionParameter
+     142(normal):     21(ptr) FunctionParameter
+  143(camVector):     21(ptr) FunctionParameter
+  144(roughness):     30(ptr) FunctionParameter
+145(ambientOcclusion):     30(ptr) FunctionParameter
+             147:             Label
+        762(res):    707(ptr) Variable Function
+             763:96(TDPBRResult) Load 762(res)
+                              ReturnValue 763
+                              FunctionEnd
+158(TDEnvLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;f1;):           2 Function None 148
+149(diffuseContrib):     21(ptr) FunctionParameter
+150(specularContrib):     21(ptr) FunctionParameter
+      151(index):     29(ptr) FunctionParameter
+152(diffuseColor):     21(ptr) FunctionParameter
+153(specularColor):     21(ptr) FunctionParameter
+     154(normal):     21(ptr) FunctionParameter
+  155(camVector):     21(ptr) FunctionParameter
+  156(roughness):     30(ptr) FunctionParameter
+157(ambientOcclusion):     30(ptr) FunctionParameter
+             159:             Label
+        766(res):    707(ptr) Variable Function
+      767(param):     29(ptr) Variable Function
+      769(param):     21(ptr) Variable Function
+      771(param):     21(ptr) Variable Function
+      773(param):     21(ptr) Variable Function
+      775(param):     21(ptr) Variable Function
+      777(param):     30(ptr) Variable Function
+      779(param):     30(ptr) Variable Function
+             768:     28(int) Load 151(index)
+                              Store 767(param) 768
+             770:   20(fvec3) Load 152(diffuseColor)
+                              Store 769(param) 770
+             772:   20(fvec3) Load 153(specularColor)
+                              Store 771(param) 772
+             774:   20(fvec3) Load 154(normal)
+                              Store 773(param) 774
+             776:   20(fvec3) Load 155(camVector)
+                              Store 775(param) 776
+             778:    6(float) Load 156(roughness)
+                              Store 777(param) 778
+             780:    6(float) Load 157(ambientOcclusion)
+                              Store 779(param) 780
+             781:96(TDPBRResult) FunctionCall 146(TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1;) 767(param) 769(param) 771(param) 773(param) 775(param) 777(param) 779(param)
+                              Store 766(res) 781
+             782:     21(ptr) AccessChain 766(res) 381
+             783:   20(fvec3) Load 782
+                              Store 149(diffuseContrib) 783
+             784:     21(ptr) AccessChain 766(res) 436
+             785:   20(fvec3) Load 784
+                              Store 150(specularContrib) 785
+                              Return
+                              FunctionEnd
+170(TDLighting(i1;vf3;vf3;f1;vf3;vf3;f1;f1;):160(TDPhongResult) Function None 161
+      162(index):     29(ptr) FunctionParameter
+163(worldSpacePos):     21(ptr) FunctionParameter
+     164(normal):     21(ptr) FunctionParameter
+165(shadowStrength):     30(ptr) FunctionParameter
+166(shadowColor):     21(ptr) FunctionParameter
+  167(camVector):     21(ptr) FunctionParameter
+  168(shininess):     30(ptr) FunctionParameter
+ 169(shininess2):     30(ptr) FunctionParameter
+             171:             Label
+        790(res):    789(ptr) Variable Function
+             786:     28(int) Load 162(index)
+                              SelectionMerge 788 None
+                              Switch 786 787
+             787:               Label
+             792:     21(ptr)   AccessChain 790(res) 381
+                                Store 792 791
+             793:     21(ptr)   AccessChain 790(res) 436
+                                Store 793 791
+             794:     21(ptr)   AccessChain 790(res) 337
+                                Store 794 791
+             795:     30(ptr)   AccessChain 790(res) 377
+                                Store 795 331
+                                Branch 788
+             788:             Label
+             798:160(TDPhongResult) Load 790(res)
+                              ReturnValue 798
+                              FunctionEnd
+185(TDLighting(vf3;vf3;vf3;f1;i1;vf3;vf3;f1;vf3;vf3;f1;f1;):           2 Function None 172
+173(diffuseContrib):     21(ptr) FunctionParameter
+174(specularContrib):     21(ptr) FunctionParameter
+175(specularContrib2):     21(ptr) FunctionParameter
+176(shadowStrengthOut):     30(ptr) FunctionParameter
+      177(index):     29(ptr) FunctionParameter
+178(worldSpacePos):     21(ptr) FunctionParameter
+     179(normal):     21(ptr) FunctionParameter
+180(shadowStrength):     30(ptr) FunctionParameter
+181(shadowColor):     21(ptr) FunctionParameter
+  182(camVector):     21(ptr) FunctionParameter
+  183(shininess):     30(ptr) FunctionParameter
+ 184(shininess2):     30(ptr) FunctionParameter
+             186:             Label
+        804(res):    789(ptr) Variable Function
+             801:     28(int) Load 177(index)
+                              SelectionMerge 803 None
+                              Switch 801 802
+             802:               Label
+             805:     21(ptr)   AccessChain 804(res) 381
+                                Store 805 791
+             806:     21(ptr)   AccessChain 804(res) 436
+                                Store 806 791
+             807:     21(ptr)   AccessChain 804(res) 337
+                                Store 807 791
+             808:     30(ptr)   AccessChain 804(res) 377
+                                Store 808 331
+                                Branch 803
+             803:             Label
+             811:     21(ptr) AccessChain 804(res) 381
+             812:   20(fvec3) Load 811
+                              Store 173(diffuseContrib) 812
+             813:     21(ptr) AccessChain 804(res) 436
+             814:   20(fvec3) Load 813
+                              Store 174(specularContrib) 814
+             815:     21(ptr) AccessChain 804(res) 337
+             816:   20(fvec3) Load 815
+                              Store 175(specularContrib2) 816
+             817:     30(ptr) AccessChain 804(res) 377
+             818:    6(float) Load 817
+                              Store 176(shadowStrengthOut) 818
+                              Return
+                              FunctionEnd
+199(TDLighting(vf3;vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;f1;):           2 Function None 187
+188(diffuseContrib):     21(ptr) FunctionParameter
+189(specularContrib):     21(ptr) FunctionParameter
+190(specularContrib2):     21(ptr) FunctionParameter
+      191(index):     29(ptr) FunctionParameter
+192(worldSpacePos):     21(ptr) FunctionParameter
+     193(normal):     21(ptr) FunctionParameter
+194(shadowStrength):     30(ptr) FunctionParameter
+195(shadowColor):     21(ptr) FunctionParameter
+  196(camVector):     21(ptr) FunctionParameter
+  197(shininess):     30(ptr) FunctionParameter
+ 198(shininess2):     30(ptr) FunctionParameter
+             200:             Label
+        822(res):    789(ptr) Variable Function
+             819:     28(int) Load 191(index)
+                              SelectionMerge 821 None
+                              Switch 819 820
+             820:               Label
+             823:     21(ptr)   AccessChain 822(res) 381
+                                Store 823 791
+             824:     21(ptr)   AccessChain 822(res) 436
+                                Store 824 791
+             825:     21(ptr)   AccessChain 822(res) 337
+                                Store 825 791
+             826:     30(ptr)   AccessChain 822(res) 377
+                                Store 826 331
+                                Branch 821
+             821:             Label
+             829:     21(ptr) AccessChain 822(res) 381
+             830:   20(fvec3) Load 829
+                              Store 188(diffuseContrib) 830
+             831:     21(ptr) AccessChain 822(res) 436
+             832:   20(fvec3) Load 831
+                              Store 189(specularContrib) 832
+             833:     21(ptr) AccessChain 822(res) 337
+             834:   20(fvec3) Load 833
+                              Store 190(specularContrib2) 834
+                              Return
+                              FunctionEnd
+211(TDLighting(vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;):           2 Function None 201
+202(diffuseContrib):     21(ptr) FunctionParameter
+203(specularContrib):     21(ptr) FunctionParameter
+      204(index):     29(ptr) FunctionParameter
+205(worldSpacePos):     21(ptr) FunctionParameter
+     206(normal):     21(ptr) FunctionParameter
+207(shadowStrength):     30(ptr) FunctionParameter
+208(shadowColor):     21(ptr) FunctionParameter
+  209(camVector):     21(ptr) FunctionParameter
+  210(shininess):     30(ptr) FunctionParameter
+             212:             Label
+        838(res):    789(ptr) Variable Function
+             835:     28(int) Load 204(index)
+                              SelectionMerge 837 None
+                              Switch 835 836
+             836:               Label
+             839:     21(ptr)   AccessChain 838(res) 381
+                                Store 839 791
+             840:     21(ptr)   AccessChain 838(res) 436
+                                Store 840 791
+             841:     21(ptr)   AccessChain 838(res) 337
+                                Store 841 791
+             842:     30(ptr)   AccessChain 838(res) 377
+                                Store 842 331
+                                Branch 837
+             837:             Label
+             845:     21(ptr) AccessChain 838(res) 381
+             846:   20(fvec3) Load 845
+                              Store 202(diffuseContrib) 846
+             847:     21(ptr) AccessChain 838(res) 436
+             848:   20(fvec3) Load 847
+                              Store 203(specularContrib) 848
+                              Return
+                              FunctionEnd
+223(TDLighting(vf3;vf3;vf3;i1;vf3;vf3;vf3;f1;f1;):           2 Function None 213
+214(diffuseContrib):     21(ptr) FunctionParameter
+215(specularContrib):     21(ptr) FunctionParameter
+216(specularContrib2):     21(ptr) FunctionParameter
+      217(index):     29(ptr) FunctionParameter
+218(worldSpacePos):     21(ptr) FunctionParameter
+     219(normal):     21(ptr) FunctionParameter
+  220(camVector):     21(ptr) FunctionParameter
+  221(shininess):     30(ptr) FunctionParameter
+ 222(shininess2):     30(ptr) FunctionParameter
+             224:             Label
+        852(res):    789(ptr) Variable Function
+             849:     28(int) Load 217(index)
+                              SelectionMerge 851 None
+                              Switch 849 850
+             850:               Label
+             853:     21(ptr)   AccessChain 852(res) 381
+                                Store 853 791
+             854:     21(ptr)   AccessChain 852(res) 436
+                                Store 854 791
+             855:     21(ptr)   AccessChain 852(res) 337
+                                Store 855 791
+             856:     30(ptr)   AccessChain 852(res) 377
+                                Store 856 331
+                                Branch 851
+             851:             Label
+             859:     21(ptr) AccessChain 852(res) 381
+             860:   20(fvec3) Load 859
+                              Store 214(diffuseContrib) 860
+             861:     21(ptr) AccessChain 852(res) 436
+             862:   20(fvec3) Load 861
+                              Store 215(specularContrib) 862
+             863:     21(ptr) AccessChain 852(res) 337
+             864:   20(fvec3) Load 863
+                              Store 216(specularContrib2) 864
+                              Return
+                              FunctionEnd
+233(TDLighting(vf3;vf3;i1;vf3;vf3;vf3;f1;):           2 Function None 225
+226(diffuseContrib):     21(ptr) FunctionParameter
+227(specularContrib):     21(ptr) FunctionParameter
+      228(index):     29(ptr) FunctionParameter
+229(worldSpacePos):     21(ptr) FunctionParameter
+     230(normal):     21(ptr) FunctionParameter
+  231(camVector):     21(ptr) FunctionParameter
+  232(shininess):     30(ptr) FunctionParameter
+             234:             Label
+        868(res):    789(ptr) Variable Function
+             865:     28(int) Load 228(index)
+                              SelectionMerge 867 None
+                              Switch 865 866
+             866:               Label
+             869:     21(ptr)   AccessChain 868(res) 381
+                                Store 869 791
+             870:     21(ptr)   AccessChain 868(res) 436
+                                Store 870 791
+             871:     21(ptr)   AccessChain 868(res) 337
+                                Store 871 791
+             872:     30(ptr)   AccessChain 868(res) 377
+                                Store 872 331
+                                Branch 867
+             867:             Label
+             875:     21(ptr) AccessChain 868(res) 381
+             876:   20(fvec3) Load 875
+                              Store 226(diffuseContrib) 876
+             877:     21(ptr) AccessChain 868(res) 436
+             878:   20(fvec3) Load 877
+                              Store 227(specularContrib) 878
+                              Return
+                              FunctionEnd
+240(TDLighting(vf3;i1;vf3;vf3;):           2 Function None 235
+236(diffuseContrib):     21(ptr) FunctionParameter
+      237(index):     29(ptr) FunctionParameter
+238(worldSpacePos):     21(ptr) FunctionParameter
+     239(normal):     21(ptr) FunctionParameter
+             241:             Label
+        882(res):    789(ptr) Variable Function
+             879:     28(int) Load 237(index)
+                              SelectionMerge 881 None
+                              Switch 879 880
+             880:               Label
+             883:     21(ptr)   AccessChain 882(res) 381
+                                Store 883 791
+             884:     21(ptr)   AccessChain 882(res) 436
+                                Store 884 791
+             885:     21(ptr)   AccessChain 882(res) 337
+                                Store 885 791
+             886:     30(ptr)   AccessChain 882(res) 377
+                                Store 886 331
+                                Branch 881
+             881:             Label
+             889:     21(ptr) AccessChain 882(res) 381
+             890:   20(fvec3) Load 889
+                              Store 236(diffuseContrib) 890
+                              Return
+                              FunctionEnd
+249(TDLighting(vf3;i1;vf3;vf3;f1;vf3;):           2 Function None 242
+243(diffuseContrib):     21(ptr) FunctionParameter
+      244(index):     29(ptr) FunctionParameter
+245(worldSpacePos):     21(ptr) FunctionParameter
+     246(normal):     21(ptr) FunctionParameter
+247(shadowStrength):     30(ptr) FunctionParameter
+248(shadowColor):     21(ptr) FunctionParameter
+             250:             Label
+        894(res):    789(ptr) Variable Function
+             891:     28(int) Load 244(index)
+                              SelectionMerge 893 None
+                              Switch 891 892
+             892:               Label
+             895:     21(ptr)   AccessChain 894(res) 381
+                                Store 895 791
+             896:     21(ptr)   AccessChain 894(res) 436
+                                Store 896 791
+             897:     21(ptr)   AccessChain 894(res) 337
+                                Store 897 791
+             898:     30(ptr)   AccessChain 894(res) 377
+                                Store 898 331
+                                Branch 893
+             893:             Label
+             901:     21(ptr) AccessChain 894(res) 381
+             902:   20(fvec3) Load 901
+                              Store 243(diffuseContrib) 902
+                              Return
+                              FunctionEnd
+255(TDProjMap(i1;vf3;vf4;):    7(fvec4) Function None 251
+      252(index):     29(ptr) FunctionParameter
+253(worldSpacePos):     21(ptr) FunctionParameter
+254(defaultColor):      8(ptr) FunctionParameter
+             256:             Label
+             903:     28(int) Load 252(index)
+                              SelectionMerge 905 None
+                              Switch 903 904
+             904:               Label
+             906:    7(fvec4)   Load 254(defaultColor)
+                                ReturnValue 906
+             905:             Label
+                              Unreachable
+                              FunctionEnd
+261(TDFog(vf4;vf3;i1;):    7(fvec4) Function None 257
+      258(color):      8(ptr) FunctionParameter
+259(lightingSpacePosition):     21(ptr) FunctionParameter
+260(cameraIndex):     29(ptr) FunctionParameter
+             262:             Label
+             910:     28(int) Load 260(cameraIndex)
+                              SelectionMerge 912 None
+                              Switch 910 911 
+                                     case 0: 911
+             911:               Label
+             913:    7(fvec4)   Load 258(color)
+                                ReturnValue 913
+             912:             Label
+                              Unreachable
+                              FunctionEnd
+266(TDFog(vf4;vf3;):    7(fvec4) Function None 263
+      264(color):      8(ptr) FunctionParameter
+265(lightingSpacePosition):     21(ptr) FunctionParameter
+             267:             Label
+      917(param):      8(ptr) Variable Function
+      919(param):     21(ptr) Variable Function
+      921(param):     29(ptr) Variable Function
+             918:    7(fvec4) Load 264(color)
+                              Store 917(param) 918
+             920:   20(fvec3) Load 265(lightingSpacePosition)
+                              Store 919(param) 920
+                              Store 921(param) 381
+             922:    7(fvec4) FunctionCall 261(TDFog(vf4;vf3;i1;) 917(param) 919(param) 921(param)
+                              ReturnValue 922
+                              FunctionEnd
+271(TDInstanceTexCoord(i1;vf3;):   20(fvec3) Function None 268
+      269(index):     29(ptr) FunctionParameter
+          270(t):     21(ptr) FunctionParameter
+             272:             Label
+      925(coord):     29(ptr) Variable Function
+       927(samp):      8(ptr) Variable Function
+          936(v):     21(ptr) Variable Function
+             926:     28(int) Load 269(index)
+                              Store 925(coord) 926
+             932:         929 Load 931(sTDInstanceTexCoord)
+             933:     28(int) Load 925(coord)
+             934:         928 Image 932
+             935:    7(fvec4) ImageFetch 934 933
+                              Store 927(samp) 935
+             937:     30(ptr) AccessChain 270(t) 390
+             938:    6(float) Load 937
+             939:     30(ptr) AccessChain 936(v) 390
+                              Store 939 938
+             940:     30(ptr) AccessChain 270(t) 393
+             941:    6(float) Load 940
+             942:     30(ptr) AccessChain 936(v) 393
+                              Store 942 941
+             943:     30(ptr) AccessChain 927(samp) 390
+             944:    6(float) Load 943
+             945:     30(ptr) AccessChain 936(v) 342
+                              Store 945 944
+             946:   20(fvec3) Load 936(v)
+                              Store 270(t) 946
+             947:   20(fvec3) Load 270(t)
+                              ReturnValue 947
+                              FunctionEnd
+275(TDInstanceActive(i1;):    22(bool) Function None 273
+      274(index):     29(ptr) FunctionParameter
+             276:             Label
+      955(coord):     29(ptr) Variable Function
+       957(samp):      8(ptr) Variable Function
+          963(v):     30(ptr) Variable Function
+             951:    950(ptr) AccessChain 376 381
+             952:     28(int) Load 951
+             953:     28(int) Load 274(index)
+             954:     28(int) ISub 953 952
+                              Store 274(index) 954
+             956:     28(int) Load 274(index)
+                              Store 955(coord) 956
+             959:         929 Load 958(sTDInstanceT)
+             960:     28(int) Load 955(coord)
+             961:         928 Image 959
+             962:    7(fvec4) ImageFetch 961 960
+                              Store 957(samp) 962
+             964:     30(ptr) AccessChain 957(samp) 390
+             965:    6(float) Load 964
+                              Store 963(v) 965
+             966:    6(float) Load 963(v)
+             967:    22(bool) FUnordNotEqual 966 331
+                              ReturnValue 967
+                              FunctionEnd
+281(iTDInstanceTranslate(i1;b1;):   20(fvec3) Function None 278
+      279(index):     29(ptr) FunctionParameter
+280(instanceActive):    277(ptr) FunctionParameter
+             282:             Label
+  970(origIndex):     29(ptr) Variable Function
+      976(coord):     29(ptr) Variable Function
+       978(samp):      8(ptr) Variable Function
+          983(v):     21(ptr) Variable Function
+             971:     28(int) Load 279(index)
+                              Store 970(origIndex) 971
+             972:    950(ptr) AccessChain 376 381
+             973:     28(int) Load 972
+             974:     28(int) Load 279(index)
+             975:     28(int) ISub 974 973
+                              Store 279(index) 975
+             977:     28(int) Load 279(index)
+                              Store 976(coord) 977
+             979:         929 Load 958(sTDInstanceT)
+             980:     28(int) Load 976(coord)
+             981:         928 Image 979
+             982:    7(fvec4) ImageFetch 981 980
+                              Store 978(samp) 982
+             984:     30(ptr) AccessChain 978(samp) 393
+             985:    6(float) Load 984
+             986:     30(ptr) AccessChain 983(v) 390
+                              Store 986 985
+             987:     30(ptr) AccessChain 978(samp) 342
+             988:    6(float) Load 987
+             989:     30(ptr) AccessChain 983(v) 393
+                              Store 989 988
+             990:     30(ptr) AccessChain 978(samp) 402
+             991:    6(float) Load 990
+             992:     30(ptr) AccessChain 983(v) 342
+                              Store 992 991
+             993:     30(ptr) AccessChain 978(samp) 390
+             994:    6(float) Load 993
+             995:    22(bool) FUnordNotEqual 994 331
+                              Store 280(instanceActive) 995
+             996:   20(fvec3) Load 983(v)
+                              ReturnValue 996
+                              FunctionEnd
+285(TDInstanceTranslate(i1;):   20(fvec3) Function None 283
+      284(index):     29(ptr) FunctionParameter
+             286:             Label
+     1003(coord):     29(ptr) Variable Function
+      1005(samp):      8(ptr) Variable Function
+         1010(v):     21(ptr) Variable Function
+             999:    950(ptr) AccessChain 376 381
+            1000:     28(int) Load 999
+            1001:     28(int) Load 284(index)
+            1002:     28(int) ISub 1001 1000
+                              Store 284(index) 1002
+            1004:     28(int) Load 284(index)
+                              Store 1003(coord) 1004
+            1006:         929 Load 958(sTDInstanceT)
+            1007:     28(int) Load 1003(coord)
+            1008:         928 Image 1006
+            1009:    7(fvec4) ImageFetch 1008 1007
+                              Store 1005(samp) 1009
+            1011:     30(ptr) AccessChain 1005(samp) 393
+            1012:    6(float) Load 1011
+            1013:     30(ptr) AccessChain 1010(v) 390
+                              Store 1013 1012
+            1014:     30(ptr) AccessChain 1005(samp) 342
+            1015:    6(float) Load 1014
+            1016:     30(ptr) AccessChain 1010(v) 393
+                              Store 1016 1015
+            1017:     30(ptr) AccessChain 1005(samp) 402
+            1018:    6(float) Load 1017
+            1019:     30(ptr) AccessChain 1010(v) 342
+                              Store 1019 1018
+            1020:   20(fvec3) Load 1010(v)
+                              ReturnValue 1020
+                              FunctionEnd
+290(TDInstanceRotateMat(i1;):         287 Function None 288
+      289(index):     29(ptr) FunctionParameter
+             291:             Label
+         1027(v):     21(ptr) Variable Function
+         1029(m):   1028(ptr) Variable Function
+            1023:    950(ptr) AccessChain 376 381
+            1024:     28(int) Load 1023
+            1025:     28(int) Load 289(index)
+            1026:     28(int) ISub 1025 1024
+                              Store 289(index) 1026
+                              Store 1027(v) 791
+                              Store 1029(m) 1031
+            1032:         287 Load 1029(m)
+                              ReturnValue 1032
+                              FunctionEnd
+293(TDInstanceScale(i1;):   20(fvec3) Function None 283
+      292(index):     29(ptr) FunctionParameter
+             294:             Label
+         1039(v):     21(ptr) Variable Function
+            1035:    950(ptr) AccessChain 376 381
+            1036:     28(int) Load 1035
+            1037:     28(int) Load 292(index)
+            1038:     28(int) ISub 1037 1036
+                              Store 292(index) 1038
+                              Store 1039(v) 670
+            1040:   20(fvec3) Load 1039(v)
+                              ReturnValue 1040
+                              FunctionEnd
+296(TDInstancePivot(i1;):   20(fvec3) Function None 283
+      295(index):     29(ptr) FunctionParameter
+             297:             Label
+         1047(v):     21(ptr) Variable Function
+            1043:    950(ptr) AccessChain 376 381
+            1044:     28(int) Load 1043
+            1045:     28(int) Load 295(index)
+            1046:     28(int) ISub 1045 1044
+                              Store 295(index) 1046
+                              Store 1047(v) 791
+            1048:   20(fvec3) Load 1047(v)
+                              ReturnValue 1048
+                              FunctionEnd
+299(TDInstanceRotTo(i1;):   20(fvec3) Function None 283
+      298(index):     29(ptr) FunctionParameter
+             300:             Label
+         1055(v):     21(ptr) Variable Function
+            1051:    950(ptr) AccessChain 376 381
+            1052:     28(int) Load 1051
+            1053:     28(int) Load 298(index)
+            1054:     28(int) ISub 1053 1052
+                              Store 298(index) 1054
+                              Store 1055(v) 607
+            1056:   20(fvec3) Load 1055(v)
+                              ReturnValue 1056
+                              FunctionEnd
+302(TDInstanceRotUp(i1;):   20(fvec3) Function None 283
+      301(index):     29(ptr) FunctionParameter
+             303:             Label
+         1063(v):     21(ptr) Variable Function
+            1059:    950(ptr) AccessChain 376 381
+            1060:     28(int) Load 1059
+            1061:     28(int) Load 301(index)
+            1062:     28(int) ISub 1061 1060
+                              Store 301(index) 1062
+                              Store 1063(v) 1030
+            1064:   20(fvec3) Load 1063(v)
+                              ReturnValue 1064
+                              FunctionEnd
+307(TDInstanceMat(i1;):         304 Function None 305
+         306(id):     29(ptr) FunctionParameter
+             308:             Label
+1067(instanceActive):    277(ptr) Variable Function
+         1069(t):     21(ptr) Variable Function
+     1070(param):     29(ptr) Variable Function
+     1072(param):    277(ptr) Variable Function
+         1082(m):   1081(ptr) Variable Function
+        1088(tt):     21(ptr) Variable Function
+                              Store 1067(instanceActive) 1068
+            1071:     28(int) Load 306(id)
+                              Store 1070(param) 1071
+            1073:   20(fvec3) FunctionCall 281(iTDInstanceTranslate(i1;b1;) 1070(param) 1072(param)
+            1074:    22(bool) Load 1072(param)
+                              Store 1067(instanceActive) 1074
+                              Store 1069(t) 1073
+            1075:    22(bool) Load 1067(instanceActive)
+            1076:    22(bool) LogicalNot 1075
+                              SelectionMerge 1078 None
+                              BranchConditional 1076 1077 1078
+            1077:               Label
+                                ReturnValue 1079
+            1078:             Label
+                              Store 1082(m) 1087
+            1089:   20(fvec3) Load 1069(t)
+                              Store 1088(tt) 1089
+            1090:     30(ptr) AccessChain 1082(m) 381 390
+            1091:    6(float) Load 1090
+            1092:     30(ptr) AccessChain 1088(tt) 390
+            1093:    6(float) Load 1092
+            1094:    6(float) FMul 1091 1093
+            1095:     30(ptr) AccessChain 1082(m) 377 390
+            1096:    6(float) Load 1095
+            1097:    6(float) FAdd 1096 1094
+            1098:     30(ptr) AccessChain 1082(m) 377 390
+                              Store 1098 1097
+            1099:     30(ptr) AccessChain 1082(m) 381 393
+            1100:    6(float) Load 1099
+            1101:     30(ptr) AccessChain 1088(tt) 390
+            1102:    6(float) Load 1101
+            1103:    6(float) FMul 1100 1102
+            1104:     30(ptr) AccessChain 1082(m) 377 393
+            1105:    6(float) Load 1104
+            1106:    6(float) FAdd 1105 1103
+            1107:     30(ptr) AccessChain 1082(m) 377 393
+                              Store 1107 1106
+            1108:     30(ptr) AccessChain 1082(m) 381 342
+            1109:    6(float) Load 1108
+            1110:     30(ptr) AccessChain 1088(tt) 390
+            1111:    6(float) Load 1110
+            1112:    6(float) FMul 1109 1111
+            1113:     30(ptr) AccessChain 1082(m) 377 342
+            1114:    6(float) Load 1113
+            1115:    6(float) FAdd 1114 1112
+            1116:     30(ptr) AccessChain 1082(m) 377 342
+                              Store 1116 1115
+            1117:     30(ptr) AccessChain 1082(m) 381 402
+            1118:    6(float) Load 1117
+            1119:     30(ptr) AccessChain 1088(tt) 390
+            1120:    6(float) Load 1119
+            1121:    6(float) FMul 1118 1120
+            1122:     30(ptr) AccessChain 1082(m) 377 402
+            1123:    6(float) Load 1122
+            1124:    6(float) FAdd 1123 1121
+            1125:     30(ptr) AccessChain 1082(m) 377 402
+                              Store 1125 1124
+            1126:     30(ptr) AccessChain 1082(m) 436 390
+            1127:    6(float) Load 1126
+            1128:     30(ptr) AccessChain 1088(tt) 393
+            1129:    6(float) Load 1128
+            1130:    6(float) FMul 1127 1129
+            1131:     30(ptr) AccessChain 1082(m) 377 390
+            1132:    6(float) Load 1131
+            1133:    6(float) FAdd 1132 1130
+            1134:     30(ptr) AccessChain 1082(m) 377 390
+                              Store 1134 1133
+            1135:     30(ptr) AccessChain 1082(m) 436 393
+            1136:    6(float) Load 1135
+            1137:     30(ptr) AccessChain 1088(tt) 393
+            1138:    6(float) Load 1137
+            1139:    6(float) FMul 1136 1138
+            1140:     30(ptr) AccessChain 1082(m) 377 393
+            1141:    6(float) Load 1140
+            1142:    6(float) FAdd 1141 1139
+            1143:     30(ptr) AccessChain 1082(m) 377 393
+                              Store 1143 1142
+            1144:     30(ptr) AccessChain 1082(m) 436 342
+            1145:    6(float) Load 1144
+            1146:     30(ptr) AccessChain 1088(tt) 393
+            1147:    6(float) Load 1146
+            1148:    6(float) FMul 1145 1147
+            1149:     30(ptr) AccessChain 1082(m) 377 342
+            1150:    6(float) Load 1149
+            1151:    6(float) FAdd 1150 1148
+            1152:     30(ptr) AccessChain 1082(m) 377 342
+                              Store 1152 1151
+            1153:     30(ptr) AccessChain 1082(m) 436 402
+            1154:    6(float) Load 1153
+            1155:     30(ptr) AccessChain 1088(tt) 393
+            1156:    6(float) Load 1155
+            1157:    6(float) FMul 1154 1156
+            1158:     30(ptr) AccessChain 1082(m) 377 402
+            1159:    6(float) Load 1158
+            1160:    6(float) FAdd 1159 1157
+            1161:     30(ptr) AccessChain 1082(m) 377 402
+                              Store 1161 1160
+            1162:     30(ptr) AccessChain 1082(m) 337 390
+            1163:    6(float) Load 1162
+            1164:     30(ptr) AccessChain 1088(tt) 342
+            1165:    6(float) Load 1164
+            1166:    6(float) FMul 1163 1165
+            1167:     30(ptr) AccessChain 1082(m) 377 390
+            1168:    6(float) Load 1167
+            1169:    6(float) FAdd 1168 1166
+            1170:     30(ptr) AccessChain 1082(m) 377 390
+                              Store 1170 1169
+            1171:     30(ptr) AccessChain 1082(m) 337 393
+            1172:    6(float) Load 1171
+            1173:     30(ptr) AccessChain 1088(tt) 342
+            1174:    6(float) Load 1173
+            1175:    6(float) FMul 1172 1174
+            1176:     30(ptr) AccessChain 1082(m) 377 393
+            1177:    6(float) Load 1176
+            1178:    6(float) FAdd 1177 1175
+            1179:     30(ptr) AccessChain 1082(m) 377 393
+                              Store 1179 1178
+            1180:     30(ptr) AccessChain 1082(m) 337 342
+            1181:    6(float) Load 1180
+            1182:     30(ptr) AccessChain 1088(tt) 342
+            1183:    6(float) Load 1182
+            1184:    6(float) FMul 1181 1183
+            1185:     30(ptr) AccessChain 1082(m) 377 342
+            1186:    6(float) Load 1185
+            1187:    6(float) FAdd 1186 1184
+            1188:     30(ptr) AccessChain 1082(m) 377 342
+                              Store 1188 1187
+            1189:     30(ptr) AccessChain 1082(m) 337 402
+            1190:    6(float) Load 1189
+            1191:     30(ptr) AccessChain 1088(tt) 342
+            1192:    6(float) Load 1191
+            1193:    6(float) FMul 1190 1192
+            1194:     30(ptr) AccessChain 1082(m) 377 402
+            1195:    6(float) Load 1194
+            1196:    6(float) FAdd 1195 1193
+            1197:     30(ptr) AccessChain 1082(m) 377 402
+                              Store 1197 1196
+            1198:         304 Load 1082(m)
+                              ReturnValue 1198
+                              FunctionEnd
+310(TDInstanceMat3(i1;):         287 Function None 288
+         309(id):     29(ptr) FunctionParameter
+             311:             Label
+         1201(m):   1028(ptr) Variable Function
+                              Store 1201(m) 1031
+            1202:         287 Load 1201(m)
+                              ReturnValue 1202
+                              FunctionEnd
+313(TDInstanceMat3ForNorm(i1;):         287 Function None 288
+         312(id):     29(ptr) FunctionParameter
+             314:             Label
+         1205(m):   1028(ptr) Variable Function
+     1206(param):     29(ptr) Variable Function
+            1207:     28(int) Load 312(id)
+                              Store 1206(param) 1207
+            1208:         287 FunctionCall 310(TDInstanceMat3(i1;) 1206(param)
+                              Store 1205(m) 1208
+            1209:         287 Load 1205(m)
+                              ReturnValue 1209
+                              FunctionEnd
+318(TDInstanceColor(i1;vf4;):    7(fvec4) Function None 315
+      316(index):     29(ptr) FunctionParameter
+   317(curColor):      8(ptr) FunctionParameter
+             319:             Label
+     1216(coord):     29(ptr) Variable Function
+      1218(samp):      8(ptr) Variable Function
+         1224(v):      8(ptr) Variable Function
+            1212:    950(ptr) AccessChain 376 381
+            1213:     28(int) Load 1212
+            1214:     28(int) Load 316(index)
+            1215:     28(int) ISub 1214 1213
+                              Store 316(index) 1215
+            1217:     28(int) Load 316(index)
+                              Store 1216(coord) 1217
+            1220:         929 Load 1219(sTDInstanceColor)
+            1221:     28(int) Load 1216(coord)
+            1222:         928 Image 1220
+            1223:    7(fvec4) ImageFetch 1222 1221
+                              Store 1218(samp) 1223
+            1225:     30(ptr) AccessChain 1218(samp) 390
+            1226:    6(float) Load 1225
+            1227:     30(ptr) AccessChain 1224(v) 390
+                              Store 1227 1226
+            1228:     30(ptr) AccessChain 1218(samp) 393
+            1229:    6(float) Load 1228
+            1230:     30(ptr) AccessChain 1224(v) 393
+                              Store 1230 1229
+            1231:     30(ptr) AccessChain 1218(samp) 342
+            1232:    6(float) Load 1231
+            1233:     30(ptr) AccessChain 1224(v) 342
+                              Store 1233 1232
+            1234:     30(ptr) AccessChain 1224(v) 402
+                              Store 1234 489
+            1235:     30(ptr) AccessChain 1224(v) 390
+            1236:    6(float) Load 1235
+            1237:     30(ptr) AccessChain 317(curColor) 390
+                              Store 1237 1236
+            1238:     30(ptr) AccessChain 1224(v) 393
+            1239:    6(float) Load 1238
+            1240:     30(ptr) AccessChain 317(curColor) 393
+                              Store 1240 1239
+            1241:     30(ptr) AccessChain 1224(v) 342
+            1242:    6(float) Load 1241
+            1243:     30(ptr) AccessChain 317(curColor) 342
+                              Store 1243 1242
+            1244:    7(fvec4) Load 317(curColor)
+                              ReturnValue 1244
+                              FunctionEnd
+321(TDOutputSwizzle(vf4;):    7(fvec4) Function None 9
+          320(c):      8(ptr) FunctionParameter
+             322:             Label
+            1247:    7(fvec4) Load 320(c)
+                              ReturnValue 1247
+                              FunctionEnd
+327(TDOutputSwizzle(vu4;):  323(ivec4) Function None 325
+          326(c):    324(ptr) FunctionParameter
+             328:             Label
+            1250:  323(ivec4) Load 326(c)
+                              ReturnValue 1250
+                              FunctionEnd
diff --git a/Test/baseResults/vk.relaxed.stagelink.vert.out b/Test/baseResults/vk.relaxed.stagelink.vert.out
index b9173f2..47e1b4f 100644
--- a/Test/baseResults/vk.relaxed.stagelink.vert.out
+++ b/Test/baseResults/vk.relaxed.stagelink.vert.out
@@ -435,7 +435,7 @@
 0:?     'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 92
 
                               Capability Shader
@@ -593,7 +593,7 @@
                               ReturnValue 64
                               FunctionEnd
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 74
 
                               Capability Shader
diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out
index 68e892b..c893103 100644
--- a/Test/baseResults/vulkan.ast.vert.out
+++ b/Test/baseResults/vulkan.ast.vert.out
@@ -258,7 +258,7 @@
 0:?       2 (const int)
 
 // Module Version 10000
-// Generated by (magic number): 8000a
+// Generated by (magic number): 8000b
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index 28134ae..78aea82 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -25,37 +25,38 @@
 ERROR: 0:43: 'push_constant' : can only be used with a block 
 ERROR: 0:45: 'push_constant' : cannot declare a default, can only be used on a block 
 ERROR: 0:46: 'binding' : cannot be used with push_constant 
-ERROR: 0:54: 'binding' : sampler/texture/image requires layout(binding=X) 
-ERROR: 0:55: 'binding' : sampler/texture/image requires layout(binding=X) 
-ERROR: 0:55: 'input_attachment_index' : can only be used with a subpass 
-ERROR: 0:56: 'binding' : sampler/texture/image requires layout(binding=X) 
-ERROR: 0:56: 'input_attachment_index' : can only be used with a subpass 
+ERROR: 0:49: 'push_constant' : Push constants blocks can't be an array 
 ERROR: 0:57: 'binding' : sampler/texture/image requires layout(binding=X) 
-ERROR: 0:57: 'subpass' : requires an input_attachment_index layout qualifier 
 ERROR: 0:58: 'binding' : sampler/texture/image requires layout(binding=X) 
-ERROR: 0:63: 'subpassLoadMS' : no matching overloaded function found 
-ERROR: 0:64: 'subpassLoad' : no matching overloaded function found 
+ERROR: 0:58: 'input_attachment_index' : can only be used with a subpass 
+ERROR: 0:59: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:59: 'input_attachment_index' : can only be used with a subpass 
+ERROR: 0:60: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:60: 'subpass' : requires an input_attachment_index layout qualifier 
+ERROR: 0:61: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:66: 'subpassLoadMS' : no matching overloaded function found 
-ERROR: 0:69: 'subroutine' : not allowed when generating SPIR-V 
-ERROR: 0:69: 'subroutine' : feature not yet implemented 
-ERROR: 0:70: 'subroutine' : not allowed when generating SPIR-V 
-ERROR: 0:70: 'subroutine' : feature not yet implemented 
-ERROR: 0:72: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan 
-ERROR: 0:76: 'texture' : no matching overloaded function found 
-ERROR: 0:77: 'imageStore' : no matching overloaded function found 
-WARNING: 0:85: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
+ERROR: 0:67: 'subpassLoad' : no matching overloaded function found 
+ERROR: 0:69: 'subpassLoadMS' : no matching overloaded function found 
+ERROR: 0:72: 'subroutine' : not allowed when generating SPIR-V 
+ERROR: 0:72: 'subroutine' : feature not yet implemented 
+ERROR: 0:73: 'subroutine' : not allowed when generating SPIR-V 
+ERROR: 0:73: 'subroutine' : feature not yet implemented 
+ERROR: 0:75: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan 
+ERROR: 0:79: 'texture' : no matching overloaded function found 
+ERROR: 0:80: 'imageStore' : no matching overloaded function found 
+WARNING: 0:88: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
          "precision mediump int; precision highp float;" 
-ERROR: 0:94: 'call argument' : sampler constructor must appear at point of use 
-ERROR: 0:95: 'call argument' : sampler constructor must appear at point of use 
-ERROR: 0:96: ',' : sampler constructor must appear at point of use 
-ERROR: 0:97: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type ' temp sampler2D' and a right operand of type ' temp sampler2D' (or there is no acceptable conversion)
 ERROR: 0:97: 'call argument' : sampler constructor must appear at point of use 
-ERROR: 0:99: 'gl_NumSamples' : undeclared identifier 
-ERROR: 0:104: 'noise1' : no matching overloaded function found 
-ERROR: 0:105: 'noise2' : no matching overloaded function found 
-ERROR: 0:106: 'noise3' : no matching overloaded function found 
-ERROR: 0:107: 'noise4' : no matching overloaded function found 
-ERROR: 54 compilation errors.  No code generated.
+ERROR: 0:98: 'call argument' : sampler constructor must appear at point of use 
+ERROR: 0:99: ',' : sampler constructor must appear at point of use 
+ERROR: 0:100: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type ' temp sampler2D' and a right operand of type ' temp sampler2D' (or there is no acceptable conversion)
+ERROR: 0:100: 'call argument' : sampler constructor must appear at point of use 
+ERROR: 0:102: 'gl_NumSamples' : undeclared identifier 
+ERROR: 0:107: 'noise1' : no matching overloaded function found 
+ERROR: 0:108: 'noise2' : no matching overloaded function found 
+ERROR: 0:109: 'noise3' : no matching overloaded function found 
+ERROR: 0:110: 'noise4' : no matching overloaded function found 
+ERROR: 55 compilation errors.  No code generated.
 
 
 ERROR: Linking fragment stage: Only one push_constant block is allowed per stage
diff --git a/Test/baseResults/xfbUnsizedArray.error.tese.out b/Test/baseResults/xfbUnsizedArray.error.tese.out
new file mode 100644
index 0000000..df3495f
--- /dev/null
+++ b/Test/baseResults/xfbUnsizedArray.error.tese.out
@@ -0,0 +1,35 @@
+xfbUnsizedArray.error.tese
+ERROR: 0:4: 'xfb_offset' : unsized array in buffer 0
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+in xfb mode
+input primitive = isolines
+vertex spacing = none
+triangle order = none
+using point mode
+ERROR: node is still EOpNull!
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:?   Linker Objects
+0:?     'unsized' (layout( xfb_buffer=0 xfb_offset=0) out unsized 1-element array of 4-component vector of float)
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+in xfb mode
+input primitive = isolines
+vertex spacing = equal_spacing
+triangle order = ccw
+using point mode
+ERROR: node is still EOpNull!
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:?   Linker Objects
+0:?     'unsized' (layout( xfb_buffer=0 xfb_offset=0) out 1-element array of 4-component vector of float)
+
diff --git a/Test/constantUnaryConversion.comp b/Test/constantUnaryConversion.comp
index 3c479ae..f0710cd 100644
--- a/Test/constantUnaryConversion.comp
+++ b/Test/constantUnaryConversion.comp
@@ -13,11 +13,18 @@
 const uint64_t uint64_t_init = uint64_t(4);

 const float16_t float16_t_init = float16_t(42.0);

 const float32_t float32_t_init = float32_t(13.0);

-const float64_t float64_t_init = float64_t(-4.0);

+const float64_t float64_t_init = float64_t(4.0);

+

+const float16_t neg_float16_t_init = float16_t(-42.0);

+const float32_t neg_float32_t_init = float32_t(-13.0);

+const float64_t neg_float64_t_init = float64_t(-4.0);

 

 #define TYPE_TO_TYPE(x, y) \

     const x y##_to_##x = x(y##_init)

 

+#define TYPE_TO_TYPE_PREFIX(prefix, x, y) \

+    const x prefix##_##y##_to_##x = x(prefix##_##y##_init)

+

 #define TYPE_TO(x)              \

     TYPE_TO_TYPE(x, bool);      \

     TYPE_TO_TYPE(x, int8_t);    \

@@ -45,4 +52,18 @@
 TYPE_TO(float32_t);

 TYPE_TO(float64_t);

 

+#define NEG_FLOAT_TO(x) \

+    TYPE_TO_TYPE_PREFIX(neg, x, float16_t); \

+    TYPE_TO_TYPE_PREFIX(neg, x, float32_t); \

+    TYPE_TO_TYPE_PREFIX(neg, x, float64_t)

+

+NEG_FLOAT_TO(bool);

+NEG_FLOAT_TO(int8_t);

+NEG_FLOAT_TO(int16_t);

+NEG_FLOAT_TO(int32_t);

+NEG_FLOAT_TO(int64_t);

+NEG_FLOAT_TO(float16_t);

+NEG_FLOAT_TO(float32_t);

+NEG_FLOAT_TO(float64_t);

+

 void main() {}

diff --git a/Test/coord_conventions.frag b/Test/coord_conventions.frag
new file mode 100644
index 0000000..4ae6060
--- /dev/null
+++ b/Test/coord_conventions.frag
@@ -0,0 +1,36 @@
+#version 140
+
+#extension GL_ARB_fragment_coord_conventions: require
+#extension GL_ARB_explicit_attrib_location : enable
+
+#ifdef GL_ES
+precision mediump float;
+#endif
+
+in vec4 i;
+
+layout (origin_upper_left,pixel_center_integer) in vec4 gl_FragCoord;
+layout (location = 0) out vec4 myColor;
+
+const float eps=0.001;
+
+void main() 
+{
+    myColor = vec4(0.2);
+    if (gl_FragCoord.y >= 10) {
+        myColor.b = 0.8;
+    }
+    if (gl_FragCoord.y == trunc(gl_FragCoord.y)) {
+        myColor.g = 0.8;
+    }
+    if (gl_FragCoord.x == trunc(gl_FragCoord.x)) {
+        myColor.r = 0.8;
+    }
+
+    vec4 diff = gl_FragCoord - i;
+    if (abs(diff.z)>eps) 
+        myColor.b = 0.5;
+    if (abs(diff.w)>eps) 
+        myColor.a = 0.5;
+
+}
\ No newline at end of file
diff --git a/Test/enhanced.0.frag b/Test/enhanced.0.frag
new file mode 100644
index 0000000..7a42c05
--- /dev/null
+++ b/Test/enhanced.0.frag
@@ -0,0 +1,9 @@
+#version 450
+
+in vec3 v;
+
+void main()
+{
+    vec4 color = vec4(v);
+}
+
diff --git a/Test/enhanced.1.frag b/Test/enhanced.1.frag
new file mode 100644
index 0000000..9aab34d
--- /dev/null
+++ b/Test/enhanced.1.frag
@@ -0,0 +1,11 @@
+#version 450
+
+in Vertex {
+    vec4 v;
+} vVert;
+
+void main()
+{
+    vec4 color = vec4(vVert.v2.rgb, 1.0);
+}
+
diff --git a/Test/enhanced.2.frag b/Test/enhanced.2.frag
new file mode 100644
index 0000000..c3c194c
--- /dev/null
+++ b/Test/enhanced.2.frag
@@ -0,0 +1,7 @@
+#version 450
+
+void main()
+{
+    vec3 color = vec3(0.0,0.0,0.0,1.0);
+}
+
diff --git a/Test/enhanced.3.frag b/Test/enhanced.3.frag
new file mode 100644
index 0000000..1de9f4b
--- /dev/null
+++ b/Test/enhanced.3.frag
@@ -0,0 +1,16 @@
+#version 450 core
+
+layout (location = 0) out vec4 FragColor;
+
+layout (location = 0) in VS_OUT
+{
+    vec2 foobar;
+} fs_in;
+
+layout (binding = 1) uniform sampler2D t0;
+
+void main()
+{             
+    FragColor = texture(t0, fs_in.foobar);   
+}
+
diff --git a/Test/enhanced.3.vert b/Test/enhanced.3.vert
new file mode 100644
index 0000000..043ee24
--- /dev/null
+++ b/Test/enhanced.3.vert
@@ -0,0 +1,22 @@
+#version 450 core
+
+layout (location = 0) in vec3 aPos;
+layout (location = 1) in vec2 aTexCoords;
+
+layout (binding = 0) uniform anonblock {
+    mat4 model;
+    mat4 view;
+    mat4 projection;
+} ;
+
+layout (location = 0) out VS_OUT
+{
+    vec2 TexCoords;
+} vs_out;
+
+void main()
+{
+    gl_Position = projection * view * model * vec4(aPos, 1.0);    
+    vs_out.TexCoords = aTexCoords;
+}
+
diff --git a/Test/enhanced.4.frag b/Test/enhanced.4.frag
new file mode 100644
index 0000000..9c16606
--- /dev/null
+++ b/Test/enhanced.4.frag
@@ -0,0 +1,16 @@
+#version 450 core
+
+layout (location = 0) out vec4 FragColor;
+
+layout (location = 1) in VS_OUT
+{
+    vec2 TexCoords;
+} fs_in;
+
+layout (binding = 1) uniform sampler2D t0;
+
+void main()
+{             
+    FragColor = texture(t0, fs_in.TexCoords);   
+}
+
diff --git a/Test/enhanced.4.vert b/Test/enhanced.4.vert
new file mode 100644
index 0000000..043ee24
--- /dev/null
+++ b/Test/enhanced.4.vert
@@ -0,0 +1,22 @@
+#version 450 core
+
+layout (location = 0) in vec3 aPos;
+layout (location = 1) in vec2 aTexCoords;
+
+layout (binding = 0) uniform anonblock {
+    mat4 model;
+    mat4 view;
+    mat4 projection;
+} ;
+
+layout (location = 0) out VS_OUT
+{
+    vec2 TexCoords;
+} vs_out;
+
+void main()
+{
+    gl_Position = projection * view * model * vec4(aPos, 1.0);    
+    vs_out.TexCoords = aTexCoords;
+}
+
diff --git a/Test/enhanced.5.frag b/Test/enhanced.5.frag
new file mode 100644
index 0000000..b2a51e2
--- /dev/null
+++ b/Test/enhanced.5.frag
@@ -0,0 +1,16 @@
+#version 450 core
+
+layout (location = 0) out vec4 FragColor;
+
+layout (location = 0) in VS_OUT
+{
+    vec3 TexCoords;
+} fs_in;
+
+layout (binding = 1) uniform sampler2D t0;
+
+void main()
+{             
+    FragColor = texture(t0, fs_in.TexCoords.xy);   
+}
+
diff --git a/Test/enhanced.5.vert b/Test/enhanced.5.vert
new file mode 100644
index 0000000..043ee24
--- /dev/null
+++ b/Test/enhanced.5.vert
@@ -0,0 +1,22 @@
+#version 450 core
+
+layout (location = 0) in vec3 aPos;
+layout (location = 1) in vec2 aTexCoords;
+
+layout (binding = 0) uniform anonblock {
+    mat4 model;
+    mat4 view;
+    mat4 projection;
+} ;
+
+layout (location = 0) out VS_OUT
+{
+    vec2 TexCoords;
+} vs_out;
+
+void main()
+{
+    gl_Position = projection * view * model * vec4(aPos, 1.0);    
+    vs_out.TexCoords = aTexCoords;
+}
+
diff --git a/Test/enhanced.6.frag b/Test/enhanced.6.frag
new file mode 100644
index 0000000..e1cf685
--- /dev/null
+++ b/Test/enhanced.6.frag
@@ -0,0 +1,16 @@
+#version 450 core
+
+layout (location = 0) out vec4 FragColor;
+
+layout (location = 0) in VS_OUT
+{
+    vec2 TexCoords;
+} fs_in[1];
+
+layout (binding = 1) uniform sampler2D t0;
+
+void main()
+{             
+    FragColor = texture(t0, fs_in[0].TexCoords);   
+}
+
diff --git a/Test/enhanced.6.vert b/Test/enhanced.6.vert
new file mode 100644
index 0000000..876a903
--- /dev/null
+++ b/Test/enhanced.6.vert
@@ -0,0 +1,22 @@
+#version 450 core
+
+layout (location = 0) in vec3 aPos;
+layout (location = 1) in vec2 aTexCoords;
+
+layout (binding = 0) uniform anonblock {
+    mat4 model;
+    mat4 view;
+    mat4 projection;
+} ;
+
+layout (location = 0) out VS_OUT
+{
+    vec2 TexCoords;
+} vs_out[2];
+
+void main()
+{
+    gl_Position = projection * view * model * vec4(aPos, 1.0);    
+    vs_out[0].TexCoords = aTexCoords;
+}
+
diff --git a/Test/enhanced.7.frag b/Test/enhanced.7.frag
new file mode 100644
index 0000000..f6e5279
--- /dev/null
+++ b/Test/enhanced.7.frag
@@ -0,0 +1,20 @@
+#version 450 core
+
+layout (location = 0) out vec4 FragColor;
+
+layout (location = 0) in Vertex
+{
+        vec4 color;
+        vec3 worldSpacePos;
+        vec3 worldSpaceNorm;
+        vec2 texCoord1;
+        flat int cameraIndex;
+} fs_in;
+
+layout (binding = 1) uniform sampler2D t0;
+
+void main()
+{             
+    FragColor = texture(t0, fs_in.texCoord1);   
+}
+
diff --git a/Test/enhanced.7.vert b/Test/enhanced.7.vert
new file mode 100644
index 0000000..4e70a61
--- /dev/null
+++ b/Test/enhanced.7.vert
@@ -0,0 +1,27 @@
+#version 450 core
+
+layout (location = 0) in vec3 aPos;
+layout (location = 1) in vec2 aTexCoords;
+
+layout (binding = 0) uniform anonblock {
+    mat4 model;
+    mat4 view;
+    mat4 projection;
+} ;
+
+layout (location = 0) out Vertex
+{
+        vec4 color;
+        vec3 worldSpacePos;
+        vec3 worldSpaceNorm;
+        vec2 texCoord1;
+        flat int cameraIndex;
+        float ii;
+} vs_out;
+
+void main()
+{
+    gl_Position = projection * view * model * vec4(aPos, 1.0);    
+    vs_out.texCoord1 = aTexCoords;
+}
+
diff --git a/Test/floatBitsToInt.vert b/Test/floatBitsToInt.vert
new file mode 100644
index 0000000..a6bb18a
--- /dev/null
+++ b/Test/floatBitsToInt.vert
@@ -0,0 +1,18 @@
+#version 150
+#extension GL_ARB_gpu_shader5 : require
+uniform int expected_value;
+uniform float value;
+out     vec4 result;
+void main()
+{
+    result = vec4(1.0, 1.0, 1.0, 1.0);
+    int ret_val = floatBitsToInt(value);
+    if (expected_value != ret_val){  result = vec4(0.0, 0.0, 0.0, 0.0); }
+
+    switch (gl_VertexID)  {
+      case 0: gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); break;
+      case 1: gl_Position = vec4( 1.0, 1.0, 0.0, 1.0); break;
+      case 2: gl_Position = vec4(-1.0,-1.0, 0.0, 1.0); break;
+      case 3: gl_Position = vec4( 1.0,-1.0, 0.0, 1.0); break;
+    }
+}
\ No newline at end of file
diff --git a/Test/gl_FragCoord.frag b/Test/gl_FragCoord.frag
new file mode 100644
index 0000000..7bb1792
--- /dev/null
+++ b/Test/gl_FragCoord.frag
@@ -0,0 +1,31 @@
+#version 150 core
+#extension GL_ARB_explicit_attrib_location : enable
+
+#ifdef GL_ES
+precision mediump float;
+#endif
+
+layout (origin_upper_left,pixel_center_integer) in vec4 gl_FragCoord;
+float myGlobalVar = gl_FragCoord.x;
+layout (origin_upper_left,pixel_center_integer) in vec4 gl_FragCoord;
+
+in vec4 i;
+layout (location = 0) out vec4 myColor;
+const float eps=0.001;
+
+void main() {
+    myColor = vec4(0.2);
+    if (gl_FragCoord.y >= 10) {
+        myColor.b = 0.8;
+    }
+    if (gl_FragCoord.y == trunc(gl_FragCoord.y)) {
+        myColor.g = 0.8;
+    }
+    if (gl_FragCoord.x == trunc(gl_FragCoord.x)) {
+        myColor.r = 0.8;
+    }
+
+    vec4 diff = gl_FragCoord - i;
+    if (abs(diff.z)>eps) myColor.b = 0.5;
+    if (abs(diff.w)>eps) myColor.a = 0.5;
+}
diff --git a/Test/glsl.versionOverride.comp b/Test/glsl.versionOverride.comp
new file mode 100644
index 0000000..f72663e
--- /dev/null
+++ b/Test/glsl.versionOverride.comp
@@ -0,0 +1,11 @@
+/*

+

+glslangValidator.exe --glsl-version 460 -V -S comp -o glsl.versionOverride.comp.out glsl.versionOverride.comp

+

+*/

+

+#version 110

+

+void main() 

+{

+}  

diff --git a/Test/glsl.versionOverride.frag b/Test/glsl.versionOverride.frag
new file mode 100644
index 0000000..1267994
--- /dev/null
+++ b/Test/glsl.versionOverride.frag
@@ -0,0 +1,11 @@
+/*

+

+glslangValidator.exe --glsl-version 420 -V -S frag -o glsl.versionOverride.frag.out glsl.versionOverride.frag

+

+*/

+

+#version 110

+

+void main()

+{

+}

diff --git a/Test/glsl.versionOverride.geom b/Test/glsl.versionOverride.geom
new file mode 100644
index 0000000..bcfc2f2
--- /dev/null
+++ b/Test/glsl.versionOverride.geom
@@ -0,0 +1,16 @@
+/*

+

+glslangValidator.exe --glsl-version 430 -V -S geom -o glsl.versionOverride.geom.out glsl.versionOverride.geom

+

+*/

+

+#version 110

+

+layout (points) in;

+layout (line_strip, max_vertices = 2) out;

+

+void main() {    

+    EmitVertex();

+    EmitVertex();   

+    EndPrimitive();

+}  

diff --git a/Test/glsl.versionOverride.tesc b/Test/glsl.versionOverride.tesc
new file mode 100644
index 0000000..3b7b1e3
--- /dev/null
+++ b/Test/glsl.versionOverride.tesc
@@ -0,0 +1,13 @@
+/*

+

+glslangValidator.exe --glsl-version 440 -V -S tesc -o glsl.versionOverride.tesc.out glsl.versionOverride.tesc

+

+*/

+

+#version 110

+

+layout(vertices = 3) out;

+

+void main() 

+{

+}  

diff --git a/Test/glsl.versionOverride.tese b/Test/glsl.versionOverride.tese
new file mode 100644
index 0000000..e92d5a9
--- /dev/null
+++ b/Test/glsl.versionOverride.tese
@@ -0,0 +1,13 @@
+/*

+

+glslangValidator.exe --glsl-version 450 -V -S tese -o glsl.versionOverride.tese.out glsl.versionOverride.tese

+

+*/

+

+#version 110

+

+layout(triangles) in;

+

+void main() 

+{

+}  

diff --git a/Test/glsl.versionOverride.vert b/Test/glsl.versionOverride.vert
new file mode 100644
index 0000000..2d5effc
--- /dev/null
+++ b/Test/glsl.versionOverride.vert
@@ -0,0 +1,11 @@
+/*

+

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

+

+*/

+

+#version 110

+

+void main()

+{

+}

diff --git a/Test/hlsl.instance.geom b/Test/hlsl.instance.geom
new file mode 100644
index 0000000..5295f38
--- /dev/null
+++ b/Test/hlsl.instance.geom
@@ -0,0 +1,17 @@
+struct VertexShaderOutput

+{

+    float4 m_position : SV_POSITION;

+    float4 m_color    : COLOR0;     

+};

+

+[maxvertexcount(3)]

+[instance(5)]

+void GeometryShader(triangle VertexShaderOutput input[3], inout TriangleStream<VertexShaderOutput> output, uint id : SV_GSInstanceID)

+{

+    [loop]

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

+    {

+        output.Append(input[i]);

+    }

+    output.RestartStrip();

+}
\ No newline at end of file
diff --git a/Test/hlsl.namespace.frag b/Test/hlsl.namespace.frag
index 76c3062..d2b0445 100644
--- a/Test/hlsl.namespace.frag
+++ b/Test/hlsl.namespace.frag
@@ -12,7 +12,7 @@
         float4 getVec() { return v2; }

         

         class C1 {

-            float4 getVec() { return v2; }

+            static float4 getVec() { return v2; }

         };

     }

 }

diff --git a/Test/hlsl.spv.1.6.discard.frag b/Test/hlsl.spv.1.6.discard.frag
new file mode 100644
index 0000000..7d9271c
--- /dev/null
+++ b/Test/hlsl.spv.1.6.discard.frag
@@ -0,0 +1,14 @@
+void foo(float f)
+{
+	if (f < 1.0)
+		discard;
+}
+
+void PixelShaderFunction(float4 input) : COLOR0
+{
+    foo(input.z);
+	if (input.x)
+		discard;
+	float f = input.x;
+	discard;
+}
diff --git a/Test/hlsl.structbuffer.rwbyte2.comp b/Test/hlsl.structbuffer.rwbyte2.comp
new file mode 100644
index 0000000..42d61c0
--- /dev/null
+++ b/Test/hlsl.structbuffer.rwbyte2.comp
@@ -0,0 +1,10 @@
+RWStructuredBuffer<uint> g_sbuf;
+RWByteAddressBuffer g_bbuf;
+
+
+void main()
+{   
+    uint f = g_bbuf.Load(16);
+    g_sbuf[0] = f;
+}
+
diff --git a/Test/hlsl.w-recip.frag b/Test/hlsl.w-recip.frag
new file mode 100644
index 0000000..4812d26
--- /dev/null
+++ b/Test/hlsl.w-recip.frag
@@ -0,0 +1,12 @@
+float4 AmbientColor = float4(1, 0.5, 0, 1);
+float4 AmbientColor2 = float4(0.5, 1, 0, 0);
+
+float4 main(float4 vpos : SV_POSITION) : SV_TARGET
+{
+    float4 vpos_t = float4(vpos.xyz, 1 / vpos.w);
+    if (vpos_t.x < 400)
+        return AmbientColor;
+    else
+        return AmbientColor2;
+}
+
diff --git a/Test/hlsl.w-recip2.frag b/Test/hlsl.w-recip2.frag
new file mode 100644
index 0000000..8ef49c9
--- /dev/null
+++ b/Test/hlsl.w-recip2.frag
@@ -0,0 +1,19 @@
+struct VSOutput
+{
+    float4 PositionPS 	        : SV_Position;
+    float3 PosInLightViewSpace 	: LIGHT_SPACE_POS;
+    float3 NormalWS 	        : NORMALWS;
+    float2 TexCoord 	        : TEXCOORD;
+};
+
+float4 AmbientColor = float4(1, 0.5, 0, 1);
+float4 AmbientColor2 = float4(0.5, 1, 0, 0);
+
+float4 main(VSOutput VSOut) : SV_TARGET
+{
+    if (VSOut.PositionPS.x < 400)
+        return AmbientColor;
+    else
+        return AmbientColor2;
+}
+
diff --git a/Test/iomap.blockOutVariableIn.2.vert b/Test/iomap.blockOutVariableIn.2.vert
new file mode 100644
index 0000000..67f45c9
--- /dev/null
+++ b/Test/iomap.blockOutVariableIn.2.vert
@@ -0,0 +1,14 @@
+#version 440

+

+layout(location = 0) out Block

+{

+    vec4 a1;

+    vec2 a2;

+};

+

+void main()

+{

+    a1 = vec4(1.0);

+    a2 = vec2(0.5);

+    gl_Position = vec4(1.0);

+}

diff --git a/Test/iomap.blockOutVariableIn.frag b/Test/iomap.blockOutVariableIn.frag
new file mode 100644
index 0000000..f2cb26e
--- /dev/null
+++ b/Test/iomap.blockOutVariableIn.frag
@@ -0,0 +1,11 @@
+#version 440

+

+layout(location = 0) in vec4 a1;

+layout(location = 1) in vec2 a2;

+

+layout(location = 0) out vec4 color;

+

+void main()

+{

+    color = vec4(a1.xy, a2);

+}

diff --git a/Test/iomap.blockOutVariableIn.geom b/Test/iomap.blockOutVariableIn.geom
new file mode 100644
index 0000000..feefdd1
--- /dev/null
+++ b/Test/iomap.blockOutVariableIn.geom
@@ -0,0 +1,28 @@
+#version 440

+

+layout(triangles) in;

+layout(triangle_strip, max_vertices=3) out;

+

+layout(location = 0) in vec4 in_a1[3];

+layout(location = 1) in vec2 in_a2[3];

+

+layout(location = 0) out vec4 a1;

+layout(location = 1) out vec2 a2;

+

+void main()

+{

+    a1 = in_a1[0];

+    a2 = in_a2[0];

+    gl_Position = vec4(1.0);

+    EmitVertex();

+

+    a1 = in_a1[1];

+    a2 = in_a2[1];

+    gl_Position = vec4(1.0);

+    EmitVertex();

+

+    a1 = in_a1[2];

+    a2 = in_a2[2];

+    gl_Position = vec4(1.0);

+    EmitVertex();

+}

diff --git a/Test/iomap.blockOutVariableIn.vert b/Test/iomap.blockOutVariableIn.vert
new file mode 100644
index 0000000..67f45c9
--- /dev/null
+++ b/Test/iomap.blockOutVariableIn.vert
@@ -0,0 +1,14 @@
+#version 440

+

+layout(location = 0) out Block

+{

+    vec4 a1;

+    vec2 a2;

+};

+

+void main()

+{

+    a1 = vec4(1.0);

+    a2 = vec2(0.5);

+    gl_Position = vec4(1.0);

+}

diff --git a/Test/iomap.variableOutBlockIn.2.vert b/Test/iomap.variableOutBlockIn.2.vert
new file mode 100644
index 0000000..f9b80b4
--- /dev/null
+++ b/Test/iomap.variableOutBlockIn.2.vert
@@ -0,0 +1,11 @@
+#version 440

+

+layout(location = 0) out vec4 a1;

+layout(location = 1) out vec2 a2;

+

+void main()

+{

+    a1 = vec4(1.0);

+    a2 = vec2(0.5);

+    gl_Position = vec4(1.0);

+}

diff --git a/Test/iomap.variableOutBlockIn.frag b/Test/iomap.variableOutBlockIn.frag
new file mode 100644
index 0000000..967d769
--- /dev/null
+++ b/Test/iomap.variableOutBlockIn.frag
@@ -0,0 +1,13 @@
+#version 440

+

+layout(location = 0) in Inputs {

+    vec4 a1;

+    vec2 a2;

+};

+

+layout(location = 0) out vec4 color;

+

+void main()

+{

+    color = vec4(a1.xy, a2);

+}

diff --git a/Test/iomap.variableOutBlockIn.geom b/Test/iomap.variableOutBlockIn.geom
new file mode 100644
index 0000000..637ddab
--- /dev/null
+++ b/Test/iomap.variableOutBlockIn.geom
@@ -0,0 +1,19 @@
+#version 440

+

+layout(triangles) in;

+layout(triangle_strip, max_vertices=3) out;

+

+layout(location = 0) in Inputs {

+    vec4 a1;

+    vec2 a2;

+} gin[3];

+

+layout(location = 0) out vec4 a1;

+layout(location = 1) out vec2 a2;

+

+void main()

+{

+    a1 = vec4(1.0);

+    a2 = vec2(0.5);

+    gl_Position = vec4(1.0);

+}

diff --git a/Test/iomap.variableOutBlockIn.vert b/Test/iomap.variableOutBlockIn.vert
new file mode 100644
index 0000000..f9b80b4
--- /dev/null
+++ b/Test/iomap.variableOutBlockIn.vert
@@ -0,0 +1,11 @@
+#version 440

+

+layout(location = 0) out vec4 a1;

+layout(location = 1) out vec2 a2;

+

+void main()

+{

+    a1 = vec4(1.0);

+    a2 = vec2(0.5);

+    gl_Position = vec4(1.0);

+}

diff --git a/Test/noMatchingFunction.frag b/Test/noMatchingFunction.frag
new file mode 100644
index 0000000..d095645
--- /dev/null
+++ b/Test/noMatchingFunction.frag
@@ -0,0 +1,19 @@
+#version 330
+
+struct S
+{
+	float a;
+};
+
+float func(S s)
+{
+	return s.a;
+}
+
+layout(location = 0) out vec4 o_color;
+
+void main()
+{
+	float c = func(1.0f); // ERROR: no matching function
+	o_color = vec4(c);
+}
diff --git a/Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp b/Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp
new file mode 100644
index 0000000..673f9b0
--- /dev/null
+++ b/Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp
@@ -0,0 +1,15 @@
+#version 460
+
+#extension GL_EXT_ray_query : enable
+
+layout(push_constant, std140) uniform params
+{
+	uvec2 tlas;
+};
+
+void main()
+{
+    rayQueryEXT rayQuery;
+    rayQueryInitializeEXT(rayQuery, accelerationStructureEXT(tlas), 0, 0, vec3(0.0), 0.0, vec3(1.0), 1.0);
+    rayQueryTerminateEXT(rayQuery);
+}
\ No newline at end of file
diff --git a/Test/runtests b/Test/runtests
index a7bdda7..2ee0db0 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -255,6 +255,15 @@
 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
+
+#
 # Testing hlsl_functionality1
 #
 echo "Testing hlsl_functionality1"
@@ -289,6 +298,46 @@
 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
+
+#
+# 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
+
 #
 # Final checking
 #
diff --git a/Test/spv.1.6.conditionalDiscard.frag b/Test/spv.1.6.conditionalDiscard.frag
new file mode 100644
index 0000000..ea80337
--- /dev/null
+++ b/Test/spv.1.6.conditionalDiscard.frag
@@ -0,0 +1,14 @@
+#version 400

+

+uniform sampler2D tex;

+in vec2 coord;

+

+void main (void)

+{

+    vec4 v = texture(tex, coord);

+

+    if (v == vec4(0.1,0.2,0.3,0.4))

+        discard;

+

+    gl_FragColor = v;

+}

diff --git a/Test/spv.1.6.helperInvocation.frag b/Test/spv.1.6.helperInvocation.frag
new file mode 100644
index 0000000..4d306db
--- /dev/null
+++ b/Test/spv.1.6.helperInvocation.frag
@@ -0,0 +1,10 @@
+#version 310 es

+precision highp float;
+

+out vec4 outp;

+void main()

+{

+    if (gl_HelperInvocation)

+        ++outp;

+}

+
diff --git a/Test/spv.1.6.samplerBuffer.frag b/Test/spv.1.6.samplerBuffer.frag
new file mode 100644
index 0000000..d12ff3d
--- /dev/null
+++ b/Test/spv.1.6.samplerBuffer.frag
@@ -0,0 +1,11 @@
+#version 140

+

+out vec4 o;

+

+uniform isamplerBuffer sampB;

+

+void main()

+{

+    o.w = float(textureSize(sampB)) / 100.0;

+}

+

diff --git a/Test/spv.1.6.separate.frag b/Test/spv.1.6.separate.frag
new file mode 100644
index 0000000..3e51be4
--- /dev/null
+++ b/Test/spv.1.6.separate.frag
@@ -0,0 +1,14 @@
+#version 400
+
+uniform sampler s;
+
+uniform textureBuffer             texBuffer;
+uniform itextureBuffer            itexBuffer;
+uniform utextureBuffer            utexBuffer;
+
+void main()
+{
+    samplerBuffer          (texBuffer, s);
+    isamplerBuffer         (itexBuffer, s);
+    usamplerBuffer         (utexBuffer, s);
+}
diff --git a/Test/spv.1.6.specConstant.comp b/Test/spv.1.6.specConstant.comp
new file mode 100644
index 0000000..6b47515
--- /dev/null
+++ b/Test/spv.1.6.specConstant.comp
@@ -0,0 +1,18 @@
+#version 450
+
+layout(local_size_x_id = 18, local_size_z_id = 19) in;
+layout(local_size_x = 32, local_size_y = 32) in;
+
+buffer bn {
+    uint a;
+} bi;
+
+void foo(uvec3 wgs)
+{
+    bi.a = wgs.x * gl_WorkGroupSize.y * wgs.z;
+}
+
+void main()
+{
+    foo(gl_WorkGroupSize);
+}
diff --git a/Test/spv.460.subgroupEXT.mesh b/Test/spv.460.subgroupEXT.mesh
new file mode 100644
index 0000000..8ccc14e
--- /dev/null
+++ b/Test/spv.460.subgroupEXT.mesh
@@ -0,0 +1,164 @@
+#version 460
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32, local_size_y=1, local_size_z=1) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of builtins in mesh shaders:
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+    uint vertexCount = MAX_VER; // vertexCount <= max_vertices
+    uint primitiveCount = MAX_PRIM; // primitiveCount <= max_primtives
+    SetMeshOutputsEXT(vertexCount, primitiveCount);
+
+    gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0);
+    gl_MeshVerticesEXT[iid].gl_PointSize = 2.0;
+    gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0;
+    gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0;
+
+    BARRIER();
+
+    gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position;
+    gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize;
+    gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3];
+    gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2];
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6;
+    gl_MeshPrimitivesEXT[iid].gl_Layer = 7;
+    gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8;
+    gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false;
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID;
+    gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer;
+    gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex;
+    gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = false;
+
+    BARRIER();
+
+    // check bound limits
+    gl_PrimitiveTriangleIndicesEXT[0] = uvec3(1, 1, 1); // range is between [0, vertexCount-1]
+    gl_PrimitiveTriangleIndicesEXT[primitiveCount - 1] = uvec3(2, 2, 2); // array size is primitiveCount*3 for triangle
+    gl_PrimitiveTriangleIndicesEXT[gid] = gl_PrimitiveTriangleIndicesEXT[gid-1];
+
+
+    BARRIER();
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+  gl_NumSubgroups;                  // allowed in mesh
+  gl_SubgroupID;                    // allowed in mesh
+  subgroupMemoryBarrierShared();    // allowed in mesh
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
diff --git a/Test/spv.460.subgroupEXT.task b/Test/spv.460.subgroupEXT.task
new file mode 100644
index 0000000..cffe98e
--- /dev/null
+++ b/Test/spv.460.subgroupEXT.task
@@ -0,0 +1,153 @@
+#version 460
+
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32, local_size_y=1, local_size_z=1) in;
+
+// test use of shared memory in task shaders:
+layout(binding=0) writeonly uniform image2D uni_image;
+uniform block0 {
+    uint uni_value;
+};
+shared vec4 mem[10];
+
+// test use of task memory in task shaders:
+struct Task {
+    vec2 dummy;
+    vec2 submesh[3];
+};
+
+taskPayloadSharedEXT Task mytask;
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    // 1. shared memory load and stores
+    for (uint i = 0; i < 10; ++i) {
+        mem[i] = vec4(i + uni_value);
+    }
+    imageStore(uni_image, ivec2(iid), mem[gid]);
+    imageStore(uni_image, ivec2(iid), mem[gid+1]);
+
+    BARRIER();
+
+    // 2. task memory stores
+
+    mytask.dummy      = vec2(30.0, 31.0);
+    mytask.submesh[0] = vec2(32.0, 33.0);
+    mytask.submesh[1] = vec2(34.0, 35.0);
+    mytask.submesh[2] = mytask.submesh[gid%2];
+
+    BARRIER();
+
+    // 3. emit task count under uniform control flow
+    EmitMeshTasksEXT(3U, 1U, 1U);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+  gl_NumSubgroups;                  // allowed in task
+  gl_SubgroupID;                    // allowed in task
+  subgroupMemoryBarrierShared();    // allowed in task
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
diff --git a/Test/spv.atomiAddEXT.error.mesh b/Test/spv.atomiAddEXT.error.mesh
new file mode 100644
index 0000000..5d4247d
--- /dev/null
+++ b/Test/spv.atomiAddEXT.error.mesh
@@ -0,0 +1,22 @@
+#version 460

+#extension GL_EXT_mesh_shader : enable

+

+#define MAX_VER  81

+#define MAX_PRIM 32

+

+layout(local_size_x = 1) in;

+

+layout(max_vertices=MAX_VER) out;

+layout(max_primitives=MAX_PRIM) out;

+layout(triangles) out;

+

+// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders:

+struct taskBlock {

+    int atom1;

+};

+taskPayloadSharedEXT taskBlock mytask;

+

+

+void main() {

+  atomicAdd(mytask.atom1, 1);

+}
\ No newline at end of file
diff --git a/Test/spv.atomiAddEXT.task b/Test/spv.atomiAddEXT.task
new file mode 100644
index 0000000..703117d
--- /dev/null
+++ b/Test/spv.atomiAddEXT.task
@@ -0,0 +1,27 @@
+#version 460

+#extension GL_EXT_mesh_shader : enable

+

+layout(local_size_x = 1) in;

+

+struct structType{

+    int y[3];

+};

+

+layout(std430) buffer t2 {

+    structType f;

+} t;

+

+buffer coherent Buffer { int x; };

+

+// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders:

+struct taskBlock {

+    int atom1;

+};

+taskPayloadSharedEXT taskBlock mytask;

+

+

+void main() {

+  atomicAdd(x, 1);

+  atomicAdd(t.f.y[1], 1);

+  atomicAdd(mytask.atom1, 1);

+}
\ No newline at end of file
diff --git a/Test/spv.debuginfo.glsl.comp b/Test/spv.debuginfo.glsl.comp
new file mode 100644
index 0000000..c37d05d
--- /dev/null
+++ b/Test/spv.debuginfo.glsl.comp
@@ -0,0 +1,177 @@
+/*
+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);
+	}
+}
diff --git a/Test/spv.debuginfo.glsl.frag b/Test/spv.debuginfo.glsl.frag
new file mode 100644
index 0000000..bf5f622
--- /dev/null
+++ b/Test/spv.debuginfo.glsl.frag
@@ -0,0 +1,192 @@
+/*
+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
+
+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);
+}
diff --git a/Test/spv.debuginfo.glsl.geom b/Test/spv.debuginfo.glsl.geom
new file mode 100644
index 0000000..756885f
--- /dev/null
+++ b/Test/spv.debuginfo.glsl.geom
@@ -0,0 +1,69 @@
+/*
+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();
+}
diff --git a/Test/spv.debuginfo.glsl.tesc b/Test/spv.debuginfo.glsl.tesc
new file mode 100644
index 0000000..41c8fe3
--- /dev/null
+++ b/Test/spv.debuginfo.glsl.tesc
@@ -0,0 +1,140 @@
+/*
+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];
+}
diff --git a/Test/spv.debuginfo.glsl.tese b/Test/spv.debuginfo.glsl.tese
new file mode 100644
index 0000000..f24ed94
--- /dev/null
+++ b/Test/spv.debuginfo.glsl.tese
@@ -0,0 +1,78 @@
+/*
+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);
+}
diff --git a/Test/spv.debuginfo.glsl.vert b/Test/spv.debuginfo.glsl.vert
new file mode 100644
index 0000000..d922d95
--- /dev/null
+++ b/Test/spv.debuginfo.glsl.vert
@@ -0,0 +1,105 @@
+/*
+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;
+}
diff --git a/Test/spv.debuginfo.hlsl.comp b/Test/spv.debuginfo.hlsl.comp
new file mode 100644
index 0000000..b700534
--- /dev/null
+++ b/Test/spv.debuginfo.hlsl.comp
@@ -0,0 +1,184 @@
+/*
+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);
+	}
+}
diff --git a/Test/spv.debuginfo.hlsl.frag b/Test/spv.debuginfo.hlsl.frag
new file mode 100644
index 0000000..93072d4
--- /dev/null
+++ b/Test/spv.debuginfo.hlsl.frag
@@ -0,0 +1,197 @@
+/*
+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);
+}
diff --git a/Test/spv.debuginfo.hlsl.geom b/Test/spv.debuginfo.hlsl.geom
new file mode 100644
index 0000000..71f9b7c
--- /dev/null
+++ b/Test/spv.debuginfo.hlsl.geom
@@ -0,0 +1,79 @@
+/*
+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();
+}
diff --git a/Test/spv.debuginfo.hlsl.tesc b/Test/spv.debuginfo.hlsl.tesc
new file mode 100644
index 0000000..ba52701
--- /dev/null
+++ b/Test/spv.debuginfo.hlsl.tesc
@@ -0,0 +1,164 @@
+/*
+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;
+}
diff --git a/Test/spv.debuginfo.hlsl.tese b/Test/spv.debuginfo.hlsl.tese
new file mode 100644
index 0000000..e7add05
--- /dev/null
+++ b/Test/spv.debuginfo.hlsl.tese
@@ -0,0 +1,94 @@
+/*
+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;
+}
diff --git a/Test/spv.debuginfo.hlsl.vert b/Test/spv.debuginfo.hlsl.vert
new file mode 100644
index 0000000..7d34ef4
--- /dev/null
+++ b/Test/spv.debuginfo.hlsl.vert
@@ -0,0 +1,112 @@
+/*
+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;
+}
diff --git a/Test/spv.earlyAndlateFragmentTests.frag b/Test/spv.earlyAndlateFragmentTests.frag
new file mode 100644
index 0000000..ef3b4af
--- /dev/null
+++ b/Test/spv.earlyAndlateFragmentTests.frag
@@ -0,0 +1,12 @@
+#version 450 core

+#extension GL_EXT_fragment_shading_rate : enable

+#extension GL_ARB_shader_stencil_export : enable

+#extension GL_ARB_fragment_shader_interlock : enable

+#extension GL_AMD_shader_early_and_late_fragment_tests : enable

+layout(location = 0) flat in int instanceIndex;

+layout(early_and_late_fragment_tests_amd) in;

+layout(depth_less) out float gl_FragDepth;

+void main()

+{

+  gl_FragDepth = float(instanceIndex) / float(81);

+}

diff --git a/Test/spv.ext.AnyHitShader.rahit b/Test/spv.ext.AnyHitShader.rahit
index 871f8fe..44c32d9 100644
--- a/Test/spv.ext.AnyHitShader.rahit
+++ b/Test/spv.ext.AnyHitShader.rahit
@@ -1,6 +1,8 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
 #extension GL_KHR_shader_subgroup_basic : enable
+#extension GL_EXT_ray_cull_mask : enable
+
 layout(location = 1) rayPayloadInEXT vec4 incomingPayload;
 void main()
 {
@@ -22,6 +24,7 @@
     int v15 = gl_GeometryIndexEXT;
     mat3x4 v16 = gl_ObjectToWorld3x4EXT;
     mat3x4 v17 = gl_WorldToObject3x4EXT;
+	uint v18 = gl_CullMaskEXT;
 	incomingPayload = vec4(0.5f);
 	if (v2 == 1) {
 	    ignoreIntersectionEXT;
diff --git a/Test/spv.ext.ClosestHitShader.rchit b/Test/spv.ext.ClosestHitShader.rchit
index 3f9bbaa..8b5f848 100644
--- a/Test/spv.ext.ClosestHitShader.rchit
+++ b/Test/spv.ext.ClosestHitShader.rchit
@@ -1,5 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
+#extension GL_EXT_ray_cull_mask : enable
+
 layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
 layout(location = 0) rayPayloadEXT vec4 localPayload;
 layout(location = 1) rayPayloadInEXT vec4 incomingPayload;
@@ -23,5 +25,6 @@
     int v15 = gl_GeometryIndexEXT;
     mat3x4 v16 = gl_ObjectToWorld3x4EXT;
     mat3x4 v17 = gl_WorldToObject3x4EXT;
+	uint v18 = gl_CullMaskEXT;
 	traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
 }
diff --git a/Test/spv.ext.IntersectShader.rint b/Test/spv.ext.IntersectShader.rint
index 4933ff5..2138ea1 100644
--- a/Test/spv.ext.IntersectShader.rint
+++ b/Test/spv.ext.IntersectShader.rint
@@ -1,5 +1,6 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
+#extension GL_EXT_ray_cull_mask : enable
 hitAttributeEXT vec4 iAttr;
 void main()
 {
@@ -18,6 +19,7 @@
 	mat4x3 v12 = gl_WorldToObjectEXT;
     mat3x4 v13 = gl_ObjectToWorld3x4EXT;
     mat3x4 v14 = gl_WorldToObject3x4EXT;
+	uint v15 = gl_CullMaskEXT;
 	iAttr = vec4(0.5f,0.5f,0.0f,1.0f);
 	reportIntersectionEXT(0.5, 1U);
 }
diff --git a/Test/spv.ext.MissShader.rmiss b/Test/spv.ext.MissShader.rmiss
index 05311c9..6ab1d1a 100644
--- a/Test/spv.ext.MissShader.rmiss
+++ b/Test/spv.ext.MissShader.rmiss
@@ -5,6 +5,7 @@
 #extension GL_ARB_shader_ballot : enable
 #extension GL_NV_shader_sm_builtins : enable
 #extension GL_ARB_sparse_texture_clamp: enable
+#extension GL_EXT_ray_cull_mask : enable
 
 layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
 layout(location = 0) rayPayloadEXT vec4 localPayload;
@@ -22,6 +23,7 @@
 	vec3 v3 = gl_WorldRayDirectionEXT;
 	float v4 = gl_RayTminEXT;
 	float v5 = gl_RayTmaxEXT;
+	uint v6 = gl_CullMaskEXT;
 	traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
     incomingPayload.x = float(gl_SubGroupSizeARB) + float(gl_SubgroupEqMask) + float(gl_WarpIDNV);
         vec4 texel = textureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp);
diff --git a/Test/spv.ext.RayGenShader.rgen b/Test/spv.ext.RayGenShader.rgen
index e9eb2cb..d342d86 100644
--- a/Test/spv.ext.RayGenShader.rgen
+++ b/Test/spv.ext.RayGenShader.rgen
@@ -1,6 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
 #extension GL_EXT_ray_flags_primitive_culling : enable
+#extension GL_EXT_opacity_micromap : enable
 layout(binding = 0) uniform accelerationStructureEXT accEXT0;
 layout(binding = 1, set = 0) uniform accelerationStructureEXT accEXT1; // Unused
 layout(binding = 2, r32ui) shadercallcoherent uniform uimage2D imageu;
@@ -18,5 +19,5 @@
     uint ly = gl_LaunchIDEXT.y;
     uint sx = gl_LaunchSizeEXT.x;
     uint sy = gl_LaunchSizeEXT.y;
-    traceRayEXT(accEXT0, lx, ly, sx, sy, gl_RayFlagsSkipTrianglesEXT | gl_RayFlagsSkipAABBEXT, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accEXT0, lx, ly, sx, sy, gl_RayFlagsSkipTrianglesEXT | gl_RayFlagsSkipAABBEXT | gl_RayFlagsForceOpacityMicromap2StateEXT, origin, 0.5f, dir, 0.75f, 1);
 }
diff --git a/Test/spv.ext.meshShaderBuiltins.mesh b/Test/spv.ext.meshShaderBuiltins.mesh
new file mode 100644
index 0000000..70a9736
--- /dev/null
+++ b/Test/spv.ext.meshShaderBuiltins.mesh
@@ -0,0 +1,74 @@
+#version 460
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32, local_size_y=1, local_size_z=1) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of builtins in mesh shaders:
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+    uvec3 numWorkGrous = gl_NumWorkGroups;
+    uint vertexCount = MAX_VER; // vertexCount <= max_vertices
+    uint primitiveCount = MAX_PRIM; // primitiveCount <= max_primtives
+    SetMeshOutputsEXT(vertexCount, primitiveCount);
+
+    gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0);
+    gl_MeshVerticesEXT[iid].gl_PointSize = 2.0;
+    gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0;
+    gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0;
+
+    BARRIER();
+
+    gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position;
+    gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize;
+    gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3];
+    gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2];
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6;
+    gl_MeshPrimitivesEXT[iid].gl_Layer = 7;
+    gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8;
+    gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false;
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID;
+    gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer;
+    gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex;
+    gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT;
+
+    BARRIER();
+
+    // check bound limits
+    gl_PrimitiveTriangleIndicesEXT[0] = uvec3(257); // should truncate 257 -> 1, range is between [0, vertexCount-1]
+    gl_PrimitiveTriangleIndicesEXT[primitiveCount - 1] = uvec3(2); // array size is primitiveCount*3 for triangle
+    gl_PrimitiveTriangleIndicesEXT[gid] = gl_PrimitiveTriangleIndicesEXT[gid-1];
+
+    BARRIER();
+}
+
+// test use of builtins enabled by other extensions
+#extension GL_ARB_shader_draw_parameters : enable
+#extension GL_EXT_multiview : enable
+
+void testAdditionalBuiltins()
+{
+    int id = gl_DrawIDARB; // GL_ARB_shader_draw_parameters
+    int viewIdx = gl_ViewIndex; // GL_EXT_multiview
+   
+}
\ No newline at end of file
diff --git a/Test/spv.ext.meshShaderRedeclBuiltins.mesh b/Test/spv.ext.meshShaderRedeclBuiltins.mesh
new file mode 100644
index 0000000..8b67034
--- /dev/null
+++ b/Test/spv.ext.meshShaderRedeclBuiltins.mesh
@@ -0,0 +1,75 @@
+#version 460
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(points) out;
+
+// test use of redeclared single-view builtins in mesh shaders:
+
+out gl_MeshPerVertexEXT {
+    vec4 gl_Position;
+    float gl_PointSize;
+    float gl_ClipDistance[4];
+    float gl_CullDistance[4];
+} gl_MeshVerticesEXT[MAX_VER];                   // explicitly sized to MAX_VER
+
+perprimitiveEXT out gl_MeshPerPrimitiveEXT {
+    int gl_PrimitiveID;
+    int gl_Layer;
+    int gl_ViewportIndex;
+    bool gl_CullPrimitiveEXT;
+    int  gl_PrimitiveShadingRateEXT;
+} gl_MeshPrimitivesEXT[];                        // implicitly sized to MAX_PRIM
+
+out uint gl_PrimitivePointIndicesEXT[MAX_PRIM];     // explicitly sized to MAX_PRIM
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    SetMeshOutputsEXT(MAX_VER, MAX_PRIM);
+
+    gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0);
+    gl_MeshVerticesEXT[iid].gl_PointSize = 2.0;
+    gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0;
+    gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0;
+
+    BARRIER();
+
+    gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position;
+    gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize;
+    gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3];
+    gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2];
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6;
+    gl_MeshPrimitivesEXT[iid].gl_Layer = 7;
+    gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8;
+    gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false;
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID;
+    gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer;
+    gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex;
+    gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT;
+
+    BARRIER();
+
+    // check bound limits
+    gl_PrimitivePointIndicesEXT[0] = 1;
+    gl_PrimitivePointIndicesEXT[MAX_PRIM - 1] = 2;
+}
diff --git a/Test/spv.ext.meshShaderTaskMem.mesh b/Test/spv.ext.meshShaderTaskMem.mesh
new file mode 100644
index 0000000..c22f767
--- /dev/null
+++ b/Test/spv.ext.meshShaderTaskMem.mesh
@@ -0,0 +1,41 @@
+#version 450
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders:
+struct taskBlock {
+    float gid1[2];
+    vec4 gid2;
+};
+taskPayloadSharedEXT taskBlock mytask;
+
+buffer bufferBlock {
+    float gid3[2];
+    vec4 gid4;
+} mybuf;
+
+layout(location=0) out outBlock {
+    float gid5;
+    vec4 gid6;
+} myblk[];
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+
+    myblk[iid].gid5 = mytask.gid1[1] + mybuf.gid3[1];
+    myblk[iid].gid6 = mytask.gid2    + mybuf.gid4;
+}
diff --git a/Test/spv.ext.meshShaderUserDefined.mesh b/Test/spv.ext.meshShaderUserDefined.mesh
new file mode 100644
index 0000000..c8035e2
--- /dev/null
+++ b/Test/spv.ext.meshShaderUserDefined.mesh
@@ -0,0 +1,59 @@
+#version 450
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of user defined interface out blocks:
+
+// per-primitive block
+perprimitiveEXT layout(location=0) out myblock {
+    float f;
+    float fArr[4];
+    vec3 pos;
+    vec4 posArr[4];
+    mat4 m;
+    mat3 mArr[2];
+} blk[];
+
+// per-vertex block
+layout(location=20) out myblock2 {
+    float f;
+    vec4 pos;
+    mat4 m;
+} blk2[];
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    blk[iid].f               = 11.0;
+    blk[iid+1].fArr[gid]     = blk[iid].f;
+    blk[iid/2].pos.yzx       = vec3(14.0, 15.0, 13.0);
+    blk[iid*2].posArr[1].yzw = blk[iid/2].pos;
+    blk[iid/4].m[2].wzyx     = vec4(13.0, 14.0, 15.0, 16.0);
+    blk[iid].mArr[0][1][1]   = blk[iid/4].m[2].w;
+    blk[iid*4].mArr[1][gid]  = vec3(17.0, 18.0, 19.0);
+
+    BARRIER();
+
+    blk2[iid].f           = blk2[iid-1].f + 20.0;
+    blk2[iid].pos         = vec4(21.0, 22.0, 23.0, 24.0);
+    blk2[iid+1].m[gid]    = blk2[iid].pos;
+    blk2[iid+1].m[gid][2] = 29.0;
+    blk2[iid+2].m[3]      = blk2[iid+1].m[gid];
+
+    BARRIER();
+}
diff --git a/Test/spv.ext.meshTaskShader.task b/Test/spv.ext.meshTaskShader.task
new file mode 100644
index 0000000..074fb23
--- /dev/null
+++ b/Test/spv.ext.meshTaskShader.task
@@ -0,0 +1,51 @@
+#version 450
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+// test use of shared memory in task shaders:
+layout(binding=0) writeonly uniform image2D uni_image;
+uniform block0 {
+    uint uni_value;
+};
+shared vec4 mem[10];
+
+// use of storage qualifier "taskPayloadSharedEXT" in task shaders
+struct Task {
+    vec2 dummy;
+    vec2 submesh[3];
+};
+taskPayloadSharedEXT Task mytask;
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    // 1. shared memory load and stores
+    for (uint i = 0; i < 10; ++i) {
+        mem[i] = vec4(i + uni_value);
+    }
+    imageStore(uni_image, ivec2(iid), mem[gid]);
+    imageStore(uni_image, ivec2(iid), mem[gid+1]);
+
+    BARRIER();
+
+    // 2. task memory stores
+
+    mytask.dummy      = vec2(30.0, 31.0);
+    mytask.submesh[0] = vec2(32.0, 33.0);
+    mytask.submesh[1] = vec2(34.0, 35.0);
+    mytask.submesh[2] = mytask.submesh[gid%2];
+
+    BARRIER();
+
+    // 3. emit task count under uniform control flow
+    EmitMeshTasksEXT(3U, 1U, 1U);
+
+}
diff --git a/Test/spv.float16NoRelaxed.vert b/Test/spv.float16NoRelaxed.vert
new file mode 100644
index 0000000..d594a1d
--- /dev/null
+++ b/Test/spv.float16NoRelaxed.vert
@@ -0,0 +1,16 @@
+#version 450
+#extension GL_KHR_shader_subgroup_vote: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16 : enable
+layout(set = 0, binding = 0, std430) buffer Buffer1
+{
+  uint result[];
+};
+
+void main (void)
+{
+  uint tempRes;
+  float16_t valueNoEqual = float16_t(gl_SubgroupInvocationID);
+  tempRes = subgroupAllEqual(valueNoEqual) ? 0x0 : 0x10;
+  result[gl_VertexIndex] = tempRes;
+}
+
diff --git a/Test/spv.fragmentShaderBarycentric2.frag b/Test/spv.fragmentShaderBarycentric2.frag
index 4682e4e..2db44af 100644
--- a/Test/spv.fragmentShaderBarycentric2.frag
+++ b/Test/spv.fragmentShaderBarycentric2.frag
@@ -4,6 +4,8 @@
 precision highp float;
 
 layout(location = 0) pervertexNV in float vertexIDs[3];
+layout(location = 1) pervertexNV in float vertexIDs2[3];
+
       
 layout(location = 1) out float value;
       
@@ -12,4 +14,8 @@
              gl_BaryCoordNoPerspNV.y * vertexIDs[1] +
              gl_BaryCoordNoPerspNV.z * vertexIDs[2]);
 
+    value += (gl_BaryCoordNoPerspNV.x * vertexIDs2[0] +
+             gl_BaryCoordNoPerspNV.y * vertexIDs2[1] +
+             gl_BaryCoordNoPerspNV.z * vertexIDs2[2]);
+
 }
diff --git a/Test/spv.fragmentShaderBarycentric3.frag b/Test/spv.fragmentShaderBarycentric3.frag
new file mode 100644
index 0000000..93e977e
--- /dev/null
+++ b/Test/spv.fragmentShaderBarycentric3.frag
@@ -0,0 +1,15 @@
+#version 450
+#extension GL_EXT_fragment_shader_barycentric : require
+
+layout(location = 0) pervertexEXT in vertices {
+    float attrib;
+    } v[];   
+      
+layout(location = 1) out float value;
+      
+void main () {
+    value = (gl_BaryCoordEXT.x * v[0].attrib +
+             gl_BaryCoordEXT.y * v[1].attrib +
+             gl_BaryCoordEXT.z * v[2].attrib);
+
+}
diff --git a/Test/spv.fragmentShaderBarycentric4.frag b/Test/spv.fragmentShaderBarycentric4.frag
new file mode 100644
index 0000000..fd4902f
--- /dev/null
+++ b/Test/spv.fragmentShaderBarycentric4.frag
@@ -0,0 +1,20 @@
+#version 320 es
+#extension GL_EXT_fragment_shader_barycentric : require
+
+precision highp float;
+
+layout(location = 0) pervertexEXT in float vertexIDs[3];
+layout(location = 1) pervertexEXT in float vertexIDs2[3];
+      
+layout(location = 1) out float value;
+      
+void main () {
+    value = (gl_BaryCoordNoPerspEXT.x * vertexIDs[0] +
+             gl_BaryCoordNoPerspEXT.y * vertexIDs[1] +
+             gl_BaryCoordNoPerspEXT.z * vertexIDs[2]);
+
+    value += (gl_BaryCoordNoPerspEXT.x * vertexIDs2[0] +
+             gl_BaryCoordNoPerspEXT.y * vertexIDs2[1] +
+             gl_BaryCoordNoPerspEXT.z * vertexIDs2[2]);
+
+}
diff --git a/Test/spv.imageAtomic64.comp b/Test/spv.imageAtomic64.comp
new file mode 100644
index 0000000..f09abf7
--- /dev/null
+++ b/Test/spv.imageAtomic64.comp
@@ -0,0 +1,12 @@
+#version 450
+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
+#extension GL_EXT_shader_image_int64 : enable
+#extension GL_KHR_memory_scope_semantics : enable
+
+layout(set = 0, binding = 0) buffer ssbo { uint64_t y; };
+layout(set = 0, binding = 1, r64ui) uniform u64image2D z;
+
+void main() {
+    // Test imageAtomicStore exclusively. Do NOT add other atomic operations to this test.
+    imageAtomicStore(z, ivec2(1, 1), y, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+}
diff --git a/Test/spv.intrinsicsSpecConst.vert b/Test/spv.intrinsicsSpecConst.vert
deleted file mode 100644
index 19cc5ef..0000000
--- a/Test/spv.intrinsicsSpecConst.vert
+++ /dev/null
@@ -1,14 +0,0 @@
-#version 450 core

-

-#extension GL_EXT_spirv_intrinsics: enable

-

-layout(constant_id = 5) const uint targetWidth = 32;

-spirv_execution_mode_id(4460/*=DenormFlushToZero*/, targetWidth);

-

-layout(constant_id = 6) const uint builtIn = 1;

-spirv_decorate_id(11/*=BuiltIn*/, builtIn) out float pointSize;

-

-void main()

-{

-    pointSize = 4.0;

-}

diff --git a/Test/spv.intrinsicsSpirvInstruction.vert b/Test/spv.intrinsicsSpirvInstruction.vert
index a4efb7d..2cc1842 100644
--- a/Test/spv.intrinsicsSpirvInstruction.vert
+++ b/Test/spv.intrinsicsSpirvInstruction.vert
@@ -4,10 +4,10 @@
 #extension GL_ARB_gpu_shader_int64: enable

 

 spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056)

-uvec2 clockRealtime2x32EXT(void);

+uvec2 clockRealtime2x32EXT(int);

 

 spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056)

-int64_t clockRealtimeEXT(void);

+uint64_t clockRealtimeEXT(int);

 

 spirv_instruction (extensions = ["SPV_AMD_shader_trinary_minmax"], set = "SPV_AMD_shader_trinary_minmax", id = 1)

 vec2 min3(vec2 x, vec2 y, vec2 z);

@@ -15,12 +15,12 @@
 layout(location = 0) in vec3 vec3In;

 

 layout(location = 0) out uvec2 uvec2Out;

-layout(location = 1) out int64_t i64Out;

+layout(location = 1) out uint64_t u64Out;

 layout(location = 2) out vec2 vec2Out;

 

 void main()

 {

-    uvec2Out = clockRealtime2x32EXT();

-    i64Out = clockRealtimeEXT();

+    uvec2Out = clockRealtime2x32EXT(1);

+    u64Out = clockRealtimeEXT(1);

     vec2Out = min3(vec3In.xy, vec3In.yz, vec3In.zx); 

-}

+}
\ No newline at end of file
diff --git a/Test/spv.intrinsicsSpirvTypeLocalVar.vert b/Test/spv.intrinsicsSpirvTypeLocalVar.vert
new file mode 100644
index 0000000..203d900
--- /dev/null
+++ b/Test/spv.intrinsicsSpirvTypeLocalVar.vert
@@ -0,0 +1,14 @@
+#version 460 core

+

+#extension GL_EXT_spirv_intrinsics: enable

+

+layout(constant_id = 9) const int size = 9;

+

+#define EmptyStruct spirv_type(id = 30)

+void func(EmptyStruct emptyStruct) {}

+

+void main()

+{

+    EmptyStruct dummy[size];

+    func(dummy[1]);

+}

diff --git a/Test/spv.pp.line.frag b/Test/spv.pp.line.frag
index 464463c..6f4702f 100644
--- a/Test/spv.pp.line.frag
+++ b/Test/spv.pp.line.frag
@@ -1,4 +1,5 @@
 #version 140
+#extension GL_GOOGLE_cpp_style_line_directive : require
 
 uniform sampler1D       texSampler1D;
 uniform sampler2D       texSampler2D;
@@ -8,9 +9,20 @@
 
 in  vec2 coords2D;
 
+#line 0 "header.h"
+float myAbs(float x) {
+    if (x > 0) {
+        return x;
+    }
+    else {
+        return -x;
+    }
+}
+
+#line 22 "spv.pp.line.frag"
 void main()
 {
-    float blendscale = 1.789;
+    float blendscale = myAbs(1.789);
     float bias       = 2.0;
     float coords1D   = 1.789;
     vec4  color      = vec4(0.0, 0.0, 0.0, 0.0);
diff --git a/Test/spv.subgroupSizeARB.frag b/Test/spv.subgroupSizeARB.frag
new file mode 100644
index 0000000..45a1701
--- /dev/null
+++ b/Test/spv.subgroupSizeARB.frag
@@ -0,0 +1,10 @@
+#version 450
+#extension GL_ARB_shader_ballot : enable
+#extension GL_KHR_shader_subgroup_basic : enable
+
+layout(location = 0) out uint result;
+
+void main (void)
+{
+  result = gl_SubGroupSizeARB;
+}
diff --git a/Test/spv.textureError.frag b/Test/spv.textureError.frag
new file mode 100644
index 0000000..a40ea36
--- /dev/null
+++ b/Test/spv.textureError.frag
@@ -0,0 +1,10 @@
+#version 140
+
+uniform sampler2D s2D;
+centroid vec2 centTexCoord;
+
+void main()
+{
+    gl_FragColor = texture2D(s2D, centTexCoord);
+}
+
diff --git a/Test/textureQueryLOD.frag b/Test/textureQueryLOD.frag
new file mode 100644
index 0000000..0d0ae3c
--- /dev/null
+++ b/Test/textureQueryLOD.frag
@@ -0,0 +1,39 @@
+#version 150
+
+#ifdef GL_ARB_texture_query_lod
+#extension GL_ARB_texture_query_lod : enable
+#endif
+#ifdef GL_ARB_gpu_shader5
+#extension GL_ARB_gpu_shader5 : enable
+#endif
+
+#ifdef GL_ES
+precision highp float;
+#endif
+
+in vec2 vUV; // vert->frag
+out vec4 color; // frag->fb
+#define UV vUV
+
+#define bias 1.5
+#define TEX 128.0
+#define offset ivec2(1,1)
+uniform highp sampler2DShadow sampler;
+uniform int funct;
+
+void main (void)
+{
+    switch (funct)
+    {
+    case 0:
+        ivec2 iv2 = textureSize(sampler, 0);
+#ifdef GL_ARB_texture_query_lod
+        vec2 fv2 = textureQueryLOD(sampler, vec2(0.0, 0.0));
+#endif
+		color = vec4(iv2,fv2);
+        break;
+    default:
+        color = vec4(1.0, 1.0, 1.0, 1.0);
+        break;
+    }
+}
diff --git a/Test/vk.relaxed.stagelink.0.0.frag b/Test/vk.relaxed.stagelink.0.0.frag
new file mode 100755
index 0000000..1f9f102
--- /dev/null
+++ b/Test/vk.relaxed.stagelink.0.0.frag
@@ -0,0 +1,139 @@
+#version 460

+uniform int uTDInstanceIDOffset;

+uniform int uTDNumInstances;

+uniform float uTDAlphaTestVal;

+#define TD_NUM_COLOR_BUFFERS 1

+#define TD_NUM_LIGHTS 0

+#define TD_NUM_SHADOWED_LIGHTS 0

+#define TD_NUM_ENV_LIGHTS 0

+#define TD_LIGHTS_ARRAY_SIZE 1

+#define TD_ENV_LIGHTS_ARRAY_SIZE 1

+#define TD_NUM_CAMERAS 1

+struct TDPhongResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	vec3 specular2;

+	float shadowStrength;

+};

+struct TDPBRResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	float shadowStrength;

+};

+struct TDMatrix

+{

+	mat4 world;

+	mat4 worldInverse;

+	mat4 worldCam;

+	mat4 worldCamInverse;

+	mat4 cam;

+	mat4 camInverse;

+	mat4 camProj;

+	mat4 camProjInverse;

+	mat4 proj;

+	mat4 projInverse;

+	mat4 worldCamProj;

+	mat4 worldCamProjInverse;

+	mat4 quadReproject;

+	mat3 worldForNormals;

+	mat3 camForNormals;

+	mat3 worldCamForNormals;

+};

+layout(std140) uniform TDMatricesBlock {

+	TDMatrix uTDMats[TD_NUM_CAMERAS];

+};

+struct TDCameraInfo

+{

+	vec4 nearFar;

+	vec4 fog;

+	vec4 fogColor;

+	int renderTOPCameraIndex;

+};

+layout(std140) uniform TDCameraInfoBlock {

+	TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];

+};

+struct TDGeneral

+{

+	vec4 ambientColor;

+	vec4 nearFar;

+	vec4 viewport;

+	vec4 viewportRes;

+	vec4 fog;

+	vec4 fogColor;

+};

+layout(std140) uniform TDGeneralBlock {

+	TDGeneral uTDGeneral;

+};

+

+void TDAlphaTest(float alpha);

+vec4 TDDither(vec4 color);

+vec4 TDOutputSwizzle(vec4 v);

+uvec4 TDOutputSwizzle(uvec4 v);

+void TDCheckOrderIndTrans();

+void TDCheckDiscard();

+uniform vec3 uConstant;

+uniform float uShadowStrength;

+uniform vec3 uShadowColor;

+uniform vec4 uDiffuseColor;

+uniform vec4 uAmbientColor;

+

+uniform sampler2DArray sColorMap;

+

+in Vertex

+{

+	vec4 color;

+	vec3 worldSpacePos;

+	vec3 texCoord0;

+	flat int cameraIndex;

+	flat int instance;

+} iVert;

+

+// Output variable for the color

+layout(location = 0) out vec4 oFragColor[TD_NUM_COLOR_BUFFERS];

+void main()

+{

+	// This allows things such as order independent transparency

+	// and Dual-Paraboloid rendering to work properly

+	TDCheckDiscard();

+

+	vec4 outcol = vec4(0.0, 0.0, 0.0, 0.0);

+

+	vec3 texCoord0 = iVert.texCoord0.stp;

+	float actualTexZ = mod(int(texCoord0.z),2048);

+	float instanceLoop = floor(int(texCoord0.z)/2048);

+	texCoord0.z = actualTexZ;

+	vec4 colorMapColor = texture(sColorMap, texCoord0.stp);

+

+	float red = colorMapColor[int(instanceLoop)];

+	colorMapColor = vec4(red);

+	// Constant Light Contribution

+	outcol.rgb += uConstant * iVert.color.rgb;

+

+	outcol *= colorMapColor;

+

+	// Alpha Calculation

+	float alpha = iVert.color.a * colorMapColor.a ;

+

+	// Dithering, does nothing if dithering is disabled

+	outcol = TDDither(outcol);

+

+	outcol.rgb *= alpha;

+

+	// Modern GL removed the implicit alpha test, so we need to apply

+	// it manually here. This function does nothing if alpha test is disabled.

+	TDAlphaTest(alpha);

+

+	outcol.a = alpha;

+	oFragColor[0] = TDOutputSwizzle(outcol);

+

+

+	// TD_NUM_COLOR_BUFFERS will be set to the number of color buffers

+	// active in the render. By default we want to output zero to every

+	// buffer except the first one.

+	for (int i = 1; i < TD_NUM_COLOR_BUFFERS; i++)

+	{

+		oFragColor[i] = vec4(0.0);

+	}

+}

diff --git a/Test/vk.relaxed.stagelink.0.0.vert b/Test/vk.relaxed.stagelink.0.0.vert
new file mode 100755
index 0000000..7f31c37
--- /dev/null
+++ b/Test/vk.relaxed.stagelink.0.0.vert
@@ -0,0 +1,126 @@
+#version 460

+uniform int uTDInstanceIDOffset;

+uniform int uTDNumInstances;

+uniform float uTDAlphaTestVal;

+#define TD_NUM_COLOR_BUFFERS 1

+#define TD_NUM_LIGHTS 0

+#define TD_NUM_SHADOWED_LIGHTS 0

+#define TD_NUM_ENV_LIGHTS 0

+#define TD_LIGHTS_ARRAY_SIZE 1

+#define TD_ENV_LIGHTS_ARRAY_SIZE 1

+#define TD_NUM_CAMERAS 1

+struct TDPhongResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	vec3 specular2;

+	float shadowStrength;

+};

+struct TDPBRResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	float shadowStrength;

+};

+struct TDMatrix

+{

+	mat4 world;

+	mat4 worldInverse;

+	mat4 worldCam;

+	mat4 worldCamInverse;

+	mat4 cam;

+	mat4 camInverse;

+	mat4 camProj;

+	mat4 camProjInverse;

+	mat4 proj;

+	mat4 projInverse;

+	mat4 worldCamProj;

+	mat4 worldCamProjInverse;

+	mat4 quadReproject;

+	mat3 worldForNormals;

+	mat3 camForNormals;

+	mat3 worldCamForNormals;

+};

+layout(std140) uniform TDMatricesBlock {

+	TDMatrix uTDMats[TD_NUM_CAMERAS];

+};

+struct TDCameraInfo

+{

+	vec4 nearFar;

+	vec4 fog;

+	vec4 fogColor;

+	int renderTOPCameraIndex;

+};

+layout(std140) uniform TDCameraInfoBlock {

+	TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];

+};

+struct TDGeneral

+{

+	vec4 ambientColor;

+	vec4 nearFar;

+	vec4 viewport;

+	vec4 viewportRes;

+	vec4 fog;

+	vec4 fogColor;

+};

+layout(std140) uniform TDGeneralBlock {

+	TDGeneral uTDGeneral;

+};

+layout(location = 0) in vec3 P;

+layout(location = 1) in vec3 N;

+layout(location = 2) in vec4 Cd;

+layout(location = 3) in vec3 uv[8];

+vec4 TDWorldToProj(vec4 v);

+vec4 TDWorldToProj(vec3 v);

+vec4 TDWorldToProj(vec4 v, vec3 uv);

+vec4 TDWorldToProj(vec3 v, vec3 uv);

+int TDInstanceID();

+int TDCameraIndex();

+vec3 TDUVUnwrapCoord();

+/*********TOUCHDEFORMPREFIX**********/

+#define TD_NUM_BONES 0

+

+vec3 TDInstanceTexCoord(int instanceID, vec3 t);

+vec4 TDInstanceColor(int instanceID, vec4 curColor);

+

+vec4 TDDeform(vec4 pos);

+vec4 TDDeform(vec3 pos);

+vec3 TDInstanceTexCoord(vec3 t);

+vec4 TDInstanceColor(vec4 curColor);

+#line 1

+

+out Vertex

+{

+	vec4 color;

+	vec3 worldSpacePos;

+	vec3 texCoord0;

+	flat int cameraIndex;

+	flat int instance;

+} oVert;

+

+void main()

+{

+

+	{ // Avoid duplicate variable defs

+		vec3 texcoord = TDInstanceTexCoord(uv[0]);

+		oVert.texCoord0.stp = texcoord.stp;

+	}

+	// First deform the vertex and normal

+	// TDDeform always returns values in world space

+	oVert.instance = TDInstanceID();

+	vec4 worldSpacePos = TDDeform(P);

+	vec3 uvUnwrapCoord = TDInstanceTexCoord(TDUVUnwrapCoord());

+	gl_Position = TDWorldToProj(worldSpacePos, uvUnwrapCoord);

+

+

+	// This is here to ensure we only execute lighting etc. code

+	// when we need it. If picking is active we don't need lighting, so

+	// this entire block of code will be ommited from the compile.

+	// The TD_PICKING_ACTIVE define will be set automatically when

+	// picking is active.

+

+	int cameraIndex = TDCameraIndex();

+	oVert.cameraIndex = cameraIndex;

+	oVert.worldSpacePos.xyz = worldSpacePos.xyz;

+	oVert.color = TDInstanceColor(Cd);

+}

diff --git a/Test/vk.relaxed.stagelink.0.1.frag b/Test/vk.relaxed.stagelink.0.1.frag
new file mode 100755
index 0000000..2a82b65
--- /dev/null
+++ b/Test/vk.relaxed.stagelink.0.1.frag
@@ -0,0 +1,504 @@
+#version 460

+uniform sampler2D sTDNoiseMap;

+uniform sampler1D sTDSineLookup;

+uniform sampler2D sTDWhite2D;

+uniform sampler3D sTDWhite3D;

+uniform sampler2DArray sTDWhite2DArray;

+uniform samplerCube sTDWhiteCube;

+uniform int uTDInstanceIDOffset;

+uniform int uTDNumInstances;

+uniform float uTDAlphaTestVal;

+#define TD_NUM_COLOR_BUFFERS 1

+#define TD_NUM_LIGHTS 0

+#define TD_NUM_SHADOWED_LIGHTS 0

+#define TD_NUM_ENV_LIGHTS 0

+#define TD_LIGHTS_ARRAY_SIZE 1

+#define TD_ENV_LIGHTS_ARRAY_SIZE 1

+#define TD_NUM_CAMERAS 1

+struct TDLight

+{

+	vec4 position;

+	vec3 direction;

+	vec3 diffuse;

+	vec4 nearFar;

+	vec4 lightSize;

+	vec4 misc;

+	vec4 coneLookupScaleBias;

+	vec4 attenScaleBiasRoll;

+	mat4 shadowMapMatrix;

+	mat4 shadowMapCamMatrix;

+	vec4 shadowMapRes;

+	mat4 projMapMatrix;

+};

+struct TDEnvLight

+{

+	vec3 color;

+	mat3 rotate;

+};

+layout(std140) uniform TDLightBlock

+{

+	TDLight	uTDLights[TD_LIGHTS_ARRAY_SIZE];

+};

+layout(std140) uniform TDEnvLightBlock

+{

+	TDEnvLight	uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE];

+};

+layout(std430) readonly restrict buffer TDEnvLightBuffer

+{

+	vec3 shCoeffs[9];

+} uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE];

+struct TDPhongResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	vec3 specular2;

+	float shadowStrength;

+};

+struct TDPBRResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	float shadowStrength;

+};

+struct TDMatrix

+{

+	mat4 world;

+	mat4 worldInverse;

+	mat4 worldCam;

+	mat4 worldCamInverse;

+	mat4 cam;

+	mat4 camInverse;

+	mat4 camProj;

+	mat4 camProjInverse;

+	mat4 proj;

+	mat4 projInverse;

+	mat4 worldCamProj;

+	mat4 worldCamProjInverse;

+	mat4 quadReproject;

+	mat3 worldForNormals;

+	mat3 camForNormals;

+	mat3 worldCamForNormals;

+};

+layout(std140) uniform TDMatricesBlock {

+	TDMatrix uTDMats[TD_NUM_CAMERAS];

+};

+struct TDCameraInfo

+{

+	vec4 nearFar;

+	vec4 fog;

+	vec4 fogColor;

+	int renderTOPCameraIndex;

+};

+layout(std140) uniform TDCameraInfoBlock {

+	TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];

+};

+struct TDGeneral

+{

+	vec4 ambientColor;

+	vec4 nearFar;

+	vec4 viewport;

+	vec4 viewportRes;

+	vec4 fog;

+	vec4 fogColor;

+};

+layout(std140) uniform TDGeneralBlock {

+	TDGeneral uTDGeneral;

+};

+

+layout(binding = 15) uniform samplerBuffer sTDInstanceT;

+layout(binding = 16) uniform samplerBuffer sTDInstanceTexCoord;

+layout(binding = 17) uniform samplerBuffer sTDInstanceColor;

+vec4 TDDither(vec4 color);

+vec3 TDHSVToRGB(vec3 c);

+vec3 TDRGBToHSV(vec3 c);

+#define PI 3.14159265

+

+vec4 TDColor(vec4 color) { return color; }

+void TDCheckOrderIndTrans() {

+}

+void TDCheckDiscard() {

+	TDCheckOrderIndTrans();

+}

+vec4 TDDither(vec4 color)

+{

+   float d = texture(sTDNoiseMap, 

+                gl_FragCoord.xy / 256.0).r;

+   d -= 0.5;

+   d /= 256.0;

+   return vec4(color.rgb + d, color.a);

+}

+bool TDFrontFacing(vec3 pos, vec3 normal)

+{

+	return gl_FrontFacing;

+}

+float TDAttenuateLight(int index, float lightDist)

+{

+	return 1.0;

+}

+void TDAlphaTest(float alpha) {

+}

+float TDHardShadow(int lightIndex, vec3 worldSpacePos)

+{ return 0.0; }

+float TDSoftShadow(int lightIndex, vec3 worldSpacePos, int samples, int steps)

+{ return 0.0; }

+float TDSoftShadow(int lightIndex, vec3 worldSpacePos)

+{ return 0.0; }

+float TDShadow(int lightIndex, vec3 worldSpacePos)

+{ return 0.0; }

+vec3 TDEquirectangularToCubeMap(vec2 mapCoord);

+vec2 TDCubeMapToEquirectangular(vec3 envMapCoord);

+vec2 TDCubeMapToEquirectangular(vec3 envMapCoord, out float mipMapBias);

+vec2 TDTexGenSphere(vec3 envMapCoord);

+float iTDRadicalInverse_VdC(uint bits) 

+{

+	bits = (bits << 16u) | (bits >> 16u);

+    bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);

+    bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);

+    bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);

+    bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);

+    return float(bits) * 2.3283064365386963e-10; // / 0x100000000

+}

+vec2 iTDHammersley(uint i, uint N) 

+{

+    return vec2(float(i) / float(N), iTDRadicalInverse_VdC(i));

+}

+vec3 iTDImportanceSampleGGX(vec2 Xi, float roughness2, vec3 N)

+{	

+	float a = roughness2;

+	float phi = 2 * 3.14159265 * Xi.x;

+	float cosTheta = sqrt( (1 - Xi.y) / (1 + (a*a - 1) * Xi.y) );

+	float sinTheta = sqrt( 1 - cosTheta * cosTheta );

+	

+	vec3 H;

+	H.x = sinTheta * cos(phi);

+	H.y = sinTheta * sin(phi);

+	H.z = cosTheta;

+	

+	vec3 upVector = abs(N.z) < 0.999 ? vec3(0, 0, 1) : vec3(1, 0, 0);

+	vec3 tangentX = normalize(cross(upVector, N));

+	vec3 tangentY = cross(N, tangentX);

+	

+	// Tangent to world space

+	vec3 worldResult = tangentX * H.x + tangentY * H.y + N * H.z;

+	return worldResult;

+}

+float iTDDistributionGGX(vec3 normal, vec3 half_vector, float roughness2)

+{

+	const float Epsilon = 0.000001;

+

+    float NdotH = clamp(dot(normal, half_vector), Epsilon, 1.0);

+    

+    float alpha2 = roughness2 * roughness2;

+    

+    float denom = NdotH * NdotH * (alpha2 - 1.0) + 1.0;

+	denom = max(1e-8, denom);

+    return alpha2 / (PI * denom * denom);

+}

+vec3 iTDCalcF(vec3 F0, float VdotH) {

+    return F0 + (vec3(1.0) - F0) * pow(2.0, (-5.55473*VdotH - 6.98316) * VdotH);

+}

+

+float iTDCalcG(float NdotL, float NdotV, float k) {

+    float Gl = 1.0 / (NdotL * (1.0 - k) + k);

+    float Gv = 1.0 / (NdotV * (1.0 - k) + k);

+    return Gl * Gv;

+}

+// 0 - All options

+TDPBRResult TDLightingPBR(int index,vec3 diffuseColor,vec3 specularColor,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float roughness)

+{

+	TDPBRResult res;

+	return res;

+}

+// 0 - All options

+void TDLightingPBR(inout vec3 diffuseContrib,inout vec3 specularContrib,inout float shadowStrengthOut,int index,vec3 diffuseColor,vec3 specularColor,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float roughness)

+{

+	TDPBRResult res = TDLightingPBR(index,diffuseColor,specularColor,worldSpacePos,normal,shadowStrength,shadowColor,camVector,roughness);	diffuseContrib = res.diffuse;

+	specularContrib = res.specular;

+	shadowStrengthOut = res.shadowStrength;

+}

+// 0 - All options

+void TDLightingPBR(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 diffuseColor,vec3 specularColor,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float roughness)

+{

+	TDPBRResult res = TDLightingPBR(index,diffuseColor,specularColor,worldSpacePos,normal,shadowStrength,shadowColor,camVector,roughness);	diffuseContrib = res.diffuse;

+	specularContrib = res.specular;

+}

+// 0 - All options

+TDPBRResult TDEnvLightingPBR(int index,vec3 diffuseColor,vec3 specularColor,vec3 normal,vec3 camVector,float roughness,float ambientOcclusion)

+{

+	TDPBRResult res;

+	return res;

+}

+// 0 - All options

+void TDEnvLightingPBR(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 diffuseColor,vec3 specularColor,vec3 normal,vec3 camVector,float roughness,float ambientOcclusion)

+{

+	TDPBRResult res = TDEnvLightingPBR(index, diffuseColor, specularColor,										normal, camVector, roughness, ambientOcclusion);

+	diffuseContrib = res.diffuse;

+	specularContrib = res.specular;

+}

+// 0 - All options

+TDPhongResult TDLighting(int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess,float shininess2)

+{

+	TDPhongResult res;

+	switch (index)

+	{

+		default:

+			res.diffuse = vec3(0.0);

+			res.specular = vec3(0.0);

+			res.specular2 = vec3(0.0);

+			res.shadowStrength = 0.0;

+			break;

+	}

+		return res;

+}

+// 0 - Legacy

+void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,inout vec3 specularContrib2,inout float shadowStrengthOut,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess,float shininess2)

+{

+	TDPhongResult res;

+	switch (index)

+	{

+		default:

+			res.diffuse = vec3(0.0);

+			res.specular = vec3(0.0);

+			res.specular2 = vec3(0.0);

+			res.shadowStrength = 0.0;

+			break;

+	}

+	diffuseContrib = res.diffuse;

+	specularContrib = res.specular;

+	specularContrib2 = res.specular2;

+	shadowStrengthOut = res.shadowStrength;

+}

+// 0 - Legacy

+void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,inout vec3 specularContrib2,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess,float shininess2)

+{

+	TDPhongResult res;

+	switch (index)

+	{

+		default:

+			res.diffuse = vec3(0.0);

+			res.specular = vec3(0.0);

+			res.specular2 = vec3(0.0);

+			res.shadowStrength = 0.0;

+			break;

+	}

+	diffuseContrib = res.diffuse;

+	specularContrib = res.specular;

+	specularContrib2 = res.specular2;

+}

+// 1 - Without specular2

+void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess)

+{

+	TDPhongResult res;

+	switch (index)

+	{

+		default:

+			res.diffuse = vec3(0.0);

+			res.specular = vec3(0.0);

+			res.specular2 = vec3(0.0);

+			res.shadowStrength = 0.0;

+			break;

+	}

+	diffuseContrib = res.diffuse;

+	specularContrib = res.specular;

+}

+// 2 - Without shadows

+void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,inout vec3 specularContrib2,int index,vec3 worldSpacePos,vec3 normal,vec3 camVector,float shininess,float shininess2)

+{

+	TDPhongResult res;

+	switch (index)

+	{

+		default:

+			res.diffuse = vec3(0.0);

+			res.specular = vec3(0.0);

+			res.specular2 = vec3(0.0);

+			res.shadowStrength = 0.0;

+			break;

+	}

+	diffuseContrib = res.diffuse;

+	specularContrib = res.specular;

+	specularContrib2 = res.specular2;

+}

+// 3 - diffuse and specular only

+void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 worldSpacePos,vec3 normal,vec3 camVector,float shininess)

+{

+	TDPhongResult res;

+	switch (index)

+	{

+		default:

+			res.diffuse = vec3(0.0);

+			res.specular = vec3(0.0);

+			res.specular2 = vec3(0.0);

+			res.shadowStrength = 0.0;

+			break;

+	}

+	diffuseContrib = res.diffuse;

+	specularContrib = res.specular;

+}

+// 4 - Diffuse only

+void TDLighting(inout vec3 diffuseContrib,int index, vec3 worldSpacePos, vec3 normal)

+{

+	TDPhongResult res;

+	switch (index)

+	{

+		default:

+			res.diffuse = vec3(0.0);

+			res.specular = vec3(0.0);

+			res.specular2 = vec3(0.0);

+			res.shadowStrength = 0.0;

+			break;

+	}

+	diffuseContrib = res.diffuse;

+}

+// 5 - diffuse only with shadows

+void TDLighting(inout vec3 diffuseContrib,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor)

+{

+	TDPhongResult res;

+	switch (index)

+	{

+		default:

+			res.diffuse = vec3(0.0);

+			res.specular = vec3(0.0);

+			res.specular2 = vec3(0.0);

+			res.shadowStrength = 0.0;

+			break;

+	}

+	diffuseContrib = res.diffuse;

+}

+vec4 TDProjMap(int index, vec3 worldSpacePos, vec4 defaultColor) {

+	switch (index)

+	{

+		default: return defaultColor;

+	}

+}

+vec4 TDFog(vec4 color, vec3 lightingSpacePosition, int cameraIndex) {

+	switch (cameraIndex) {

+			default:

+		case 0:

+		{

+	return color;

+		}

+	}

+}

+vec4 TDFog(vec4 color, vec3 lightingSpacePosition)

+{

+	return TDFog(color, lightingSpacePosition, 0);

+}

+vec3 TDInstanceTexCoord(int index, vec3 t) {

+	vec3 v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceTexCoord, coord);

+	v[0] = t.s;

+	v[1] = t.t;

+	v[2] = samp[0];

+    t.stp = v.stp;

+	return t;

+}

+bool TDInstanceActive(int index) {

+	index -= uTDInstanceIDOffset;

+	float v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceT, coord);

+	v = samp[0];

+	return v != 0.0;

+}

+vec3 iTDInstanceTranslate(int index, out bool instanceActive) {

+	int origIndex = index;

+	index -= uTDInstanceIDOffset;

+	vec3 v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceT, coord);

+	v[0] = samp[1];

+	v[1] = samp[2];

+	v[2] = samp[3];

+	instanceActive = samp[0] != 0.0;

+	return v;

+}

+vec3 TDInstanceTranslate(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceT, coord);

+	v[0] = samp[1];

+	v[1] = samp[2];

+	v[2] = samp[3];

+	return v;

+}

+mat3 TDInstanceRotateMat(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(0.0, 0.0, 0.0);

+	mat3 m = mat3(1.0);

+{

+	mat3 r;

+}

+	return m;

+}

+vec3 TDInstanceScale(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(1.0, 1.0, 1.0);

+	return v;

+}

+vec3 TDInstancePivot(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(0.0, 0.0, 0.0);

+	return v;

+}

+vec3 TDInstanceRotTo(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(0.0, 0.0, 1.0);

+	return v;

+}

+vec3 TDInstanceRotUp(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(0.0, 1.0, 0.0);

+	return v;

+}

+mat4 TDInstanceMat(int id) {

+	bool instanceActive = true;

+	vec3 t = iTDInstanceTranslate(id, instanceActive);

+	if (!instanceActive)

+	{

+		return mat4(0.0);

+	}

+	mat4 m = mat4(1.0);

+	{

+		vec3 tt = t;

+		m[3][0] += m[0][0]*tt.x;

+		m[3][1] += m[0][1]*tt.x;

+		m[3][2] += m[0][2]*tt.x;

+		m[3][3] += m[0][3]*tt.x;

+		m[3][0] += m[1][0]*tt.y;

+		m[3][1] += m[1][1]*tt.y;

+		m[3][2] += m[1][2]*tt.y;

+		m[3][3] += m[1][3]*tt.y;

+		m[3][0] += m[2][0]*tt.z;

+		m[3][1] += m[2][1]*tt.z;

+		m[3][2] += m[2][2]*tt.z;

+		m[3][3] += m[2][3]*tt.z;

+	}

+	return m;

+}

+mat3 TDInstanceMat3(int id) {

+	mat3 m = mat3(1.0);

+	return m;

+}

+mat3 TDInstanceMat3ForNorm(int id) {

+	mat3 m = TDInstanceMat3(id);

+	return m;

+}

+vec4 TDInstanceColor(int index, vec4 curColor) {

+	index -= uTDInstanceIDOffset;

+	vec4 v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceColor, coord);

+	v[0] = samp[0];

+	v[1] = samp[1];

+	v[2] = samp[2];

+	v[3] = 1.0;

+	curColor[0] = v[0];

+;

+	curColor[1] = v[1];

+;

+	curColor[2] = v[2];

+;

+	return curColor;

+}

diff --git a/Test/vk.relaxed.stagelink.0.1.vert b/Test/vk.relaxed.stagelink.0.1.vert
new file mode 100755
index 0000000..3c5de98
--- /dev/null
+++ b/Test/vk.relaxed.stagelink.0.1.vert
@@ -0,0 +1,242 @@
+#version 460

+layout(location = 0) in vec3 P;

+layout(location = 1) in vec3 N;

+layout(location = 2) in vec4 Cd;

+layout(location = 3) in vec3 uv[8];

+uniform int uTDInstanceIDOffset;

+uniform int uTDNumInstances;

+uniform float uTDAlphaTestVal;

+#define TD_NUM_COLOR_BUFFERS 1

+#define TD_NUM_LIGHTS 0

+#define TD_NUM_SHADOWED_LIGHTS 0

+#define TD_NUM_ENV_LIGHTS 0

+#define TD_LIGHTS_ARRAY_SIZE 1

+#define TD_ENV_LIGHTS_ARRAY_SIZE 1

+#define TD_NUM_CAMERAS 1

+struct TDLight

+{

+	vec4 position;

+	vec3 direction;

+	vec3 diffuse;

+	vec4 nearFar;

+	vec4 lightSize;

+	vec4 misc;

+	vec4 coneLookupScaleBias;

+	vec4 attenScaleBiasRoll;

+	mat4 shadowMapMatrix;

+	mat4 shadowMapCamMatrix;

+	vec4 shadowMapRes;

+	mat4 projMapMatrix;

+};

+struct TDEnvLight

+{

+	vec3 color;

+	mat3 rotate;

+};

+layout(std140) uniform TDLightBlock

+{

+	TDLight	uTDLights[TD_LIGHTS_ARRAY_SIZE];

+};

+layout(std140) uniform TDEnvLightBlock

+{

+	TDEnvLight	uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE];

+};

+layout(std430) readonly restrict buffer TDEnvLightBuffer

+{

+	vec3 shCoeffs[9];

+} uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE];

+struct TDPhongResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	vec3 specular2;

+	float shadowStrength;

+};

+struct TDPBRResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	float shadowStrength;

+};

+struct TDMatrix

+{

+	mat4 world;

+	mat4 worldInverse;

+	mat4 worldCam;

+	mat4 worldCamInverse;

+	mat4 cam;

+	mat4 camInverse;

+	mat4 camProj;

+	mat4 camProjInverse;

+	mat4 proj;

+	mat4 projInverse;

+	mat4 worldCamProj;

+	mat4 worldCamProjInverse;

+	mat4 quadReproject;

+	mat3 worldForNormals;

+	mat3 camForNormals;

+	mat3 worldCamForNormals;

+};

+layout(std140) uniform TDMatricesBlock {

+	TDMatrix uTDMats[TD_NUM_CAMERAS];

+};

+struct TDCameraInfo

+{

+	vec4 nearFar;

+	vec4 fog;

+	vec4 fogColor;

+	int renderTOPCameraIndex;

+};

+layout(std140) uniform TDCameraInfoBlock {

+	TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];

+};

+struct TDGeneral

+{

+	vec4 ambientColor;

+	vec4 nearFar;

+	vec4 viewport;

+	vec4 viewportRes;

+	vec4 fog;

+	vec4 fogColor;

+};

+layout(std140) uniform TDGeneralBlock {

+	TDGeneral uTDGeneral;

+};

+layout (rgba8) uniform image2D mTD2DImageOutputs[1];

+layout (rgba8) uniform image2DArray mTD2DArrayImageOutputs[1];

+layout (rgba8) uniform image3D mTD3DImageOutputs[1];

+layout (rgba8) uniform imageCube mTDCubeImageOutputs[1];

+

+mat4 TDInstanceMat(int instanceID);

+mat3 TDInstanceMat3(int instanceID);

+vec3 TDInstanceTranslate(int instanceID);

+bool TDInstanceActive(int instanceID);

+mat3 TDInstanceRotateMat(int instanceID);

+vec3 TDInstanceScale(int instanceID);

+vec3 TDInstanceTexCoord(int instanceID, vec3 t);

+vec4 TDInstanceColor(int instanceID, vec4 curColor);

+vec4 TDInstanceCustomAttrib0(int instanceID);

+vec4 TDInstanceCustomAttrib1(int instanceID);

+vec4 TDInstanceCustomAttrib2(int instanceID);

+vec4 TDInstanceCustomAttrib3(int instanceID);

+vec4 TDInstanceCustomAttrib4(int instanceID);

+vec4 TDInstanceCustomAttrib5(int instanceID);

+vec4 TDInstanceCustomAttrib6(int instanceID);

+vec4 TDInstanceCustomAttrib7(int instanceID);

+vec4 TDInstanceCustomAttrib8(int instanceID);

+vec4 TDInstanceCustomAttrib9(int instanceID);

+vec4 TDInstanceCustomAttrib10(int instanceID);

+vec4 TDInstanceCustomAttrib11(int instanceID);

+uint TDInstanceTextureIndex(int instanceIndex);

+vec4 TDInstanceTexture(uint texIndex, vec3 uv);

+vec4 TDInstanceTexture(uint texIndex, vec2 uv);

+

+vec4 TDDeform(vec4 pos);

+vec4 TDDeform(vec3 pos);

+vec4 TDDeform(int instanceID, vec3 pos);

+vec3 TDDeformVec(vec3 v); 

+vec3 TDDeformVec(int instanceID, vec3 v); 

+vec3 TDDeformNorm(vec3 v); 

+vec3 TDDeformNorm(int instanceID, vec3 v); 

+vec4 TDSkinnedDeform(vec4 pos);

+vec3 TDSkinnedDeformVec(vec3 vec);

+vec3 TDSkinnedDeformNorm(vec3 vec);

+vec4 TDInstanceDeform(vec4 pos);

+vec3 TDInstanceDeformVec(vec3 vec);

+vec3 TDInstanceDeformNorm(vec3 vec);

+vec4 TDInstanceDeform(int instanceID, vec4 pos);

+vec3 TDInstanceDeformVec(int instanceID, vec3 vec);

+vec3 TDInstanceDeformNorm(int instanceID, vec3 vec);

+vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm);

+mat4 TDBoneMat(int boneIndex);

+mat4 TDInstanceMat();

+mat3 TDInstanceMat3();

+vec3 TDInstanceTranslate();

+bool TDInstanceActive();

+mat3 TDInstanceRotateMat();

+vec3 TDInstanceScale();

+vec3 TDInstanceTexCoord(vec3 t);

+vec4 TDInstanceColor(vec4 curColor);

+vec4 TDPointColor();

+#ifdef TD_PICKING_ACTIVE

+out TDPickVertex {

+	vec3 sopSpacePosition;

+	vec3 camSpacePosition;

+	vec3 worldSpacePosition;

+	vec3 sopSpaceNormal;

+	vec3 camSpaceNormal;

+	vec3 worldSpaceNormal;

+	vec3 uv[1];

+	flat int pickId;

+	flat int instanceId;

+	vec4 color;

+} oTDPickVert;

+#define vTDPickVert oTDPickVert

+#endif

+vec4 iTDCamToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod)

+{

+	if (!TDInstanceActive())

+		return vec4(2, 2, 2, 0);

+	v = uTDMats[0].proj * v;

+	return v;

+}

+vec4 iTDWorldToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod) {

+	if (!TDInstanceActive())

+		return vec4(2, 2, 2, 0);

+	v = uTDMats[0].camProj * v;

+	return v;

+}

+vec4 TDDeform(vec4 pos);

+vec4 TDDeform(vec3 pos);

+vec4 TDInstanceColor(vec4 curColor);

+vec3 TDInstanceTexCoord(vec3 t);

+int TDInstanceID() {

+	return gl_InstanceID + uTDInstanceIDOffset;

+}

+int TDCameraIndex() {

+	return 0;

+}

+vec3 TDUVUnwrapCoord() {

+	return uv[0];

+}

+#ifdef TD_PICKING_ACTIVE

+uniform int uTDPickId;

+#endif

+int TDPickID() {

+#ifdef TD_PICKING_ACTIVE

+	return uTDPickId;

+#else

+	return 0;

+#endif

+}

+float iTDConvertPickId(int id) {

+	id |= 1073741824;

+	return intBitsToFloat(id);

+}

+

+	void TDWritePickingValues() {

+#ifdef TD_PICKING_ACTIVE

+   vec4 worldPos = TDDeform(P);

+   vec4 camPos = uTDMats[TDCameraIndex()].cam * worldPos;

+	oTDPickVert.pickId = TDPickID();

+#endif

+}

+vec4 TDWorldToProj(vec4 v, vec3 uv)

+{

+	return iTDWorldToProj(v, uv, TDCameraIndex(), true);

+}

+vec4 TDWorldToProj(vec3 v, vec3 uv)

+{

+	return TDWorldToProj(vec4(v, 1.0), uv);

+}

+vec4 TDWorldToProj(vec4 v)

+{

+	return TDWorldToProj(v, vec3(0.0));

+}

+vec4 TDWorldToProj(vec3 v)

+{

+	return TDWorldToProj(vec4(v, 1.0));

+}

+vec4 TDPointColor() {

+	return Cd;

+}

diff --git a/Test/vk.relaxed.stagelink.0.2.frag b/Test/vk.relaxed.stagelink.0.2.frag
new file mode 100755
index 0000000..27bd540
--- /dev/null
+++ b/Test/vk.relaxed.stagelink.0.2.frag
@@ -0,0 +1,9 @@
+#version 460

+vec4 TDOutputSwizzle(vec4 c)

+{

+	return c.rgba;

+}

+uvec4 TDOutputSwizzle(uvec4 c)

+{

+	return c.rgba;

+}

diff --git a/Test/vk.relaxed.stagelink.0.2.vert b/Test/vk.relaxed.stagelink.0.2.vert
new file mode 100755
index 0000000..69c0b21
--- /dev/null
+++ b/Test/vk.relaxed.stagelink.0.2.vert
@@ -0,0 +1,320 @@
+#version 460

+uniform int uTDInstanceIDOffset;

+uniform int uTDNumInstances;

+uniform float uTDAlphaTestVal;

+#define TD_NUM_COLOR_BUFFERS 1

+#define TD_NUM_LIGHTS 0

+#define TD_NUM_SHADOWED_LIGHTS 0

+#define TD_NUM_ENV_LIGHTS 0

+#define TD_LIGHTS_ARRAY_SIZE 1

+#define TD_ENV_LIGHTS_ARRAY_SIZE 1

+#define TD_NUM_CAMERAS 1

+struct TDLight

+{

+	vec4 position;

+	vec3 direction;

+	vec3 diffuse;

+	vec4 nearFar;

+	vec4 lightSize;

+	vec4 misc;

+	vec4 coneLookupScaleBias;

+	vec4 attenScaleBiasRoll;

+	mat4 shadowMapMatrix;

+	mat4 shadowMapCamMatrix;

+	vec4 shadowMapRes;

+	mat4 projMapMatrix;

+};

+struct TDEnvLight

+{

+	vec3 color;

+	mat3 rotate;

+};

+layout(std140) uniform TDLightBlock

+{

+	TDLight	uTDLights[TD_LIGHTS_ARRAY_SIZE];

+};

+layout(std140) uniform TDEnvLightBlock

+{

+	TDEnvLight	uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE];

+};

+layout(std430) readonly restrict buffer TDEnvLightBuffer

+{

+	vec3 shCoeffs[9];

+} uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE];

+struct TDPhongResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	vec3 specular2;

+	float shadowStrength;

+};

+struct TDPBRResult

+{

+	vec3 diffuse;

+	vec3 specular;

+	float shadowStrength;

+};

+struct TDMatrix

+{

+	mat4 world;

+	mat4 worldInverse;

+	mat4 worldCam;

+	mat4 worldCamInverse;

+	mat4 cam;

+	mat4 camInverse;

+	mat4 camProj;

+	mat4 camProjInverse;

+	mat4 proj;

+	mat4 projInverse;

+	mat4 worldCamProj;

+	mat4 worldCamProjInverse;

+	mat4 quadReproject;

+	mat3 worldForNormals;

+	mat3 camForNormals;

+	mat3 worldCamForNormals;

+};

+layout(std140) uniform TDMatricesBlock {

+	TDMatrix uTDMats[TD_NUM_CAMERAS];

+};

+struct TDCameraInfo

+{

+	vec4 nearFar;

+	vec4 fog;

+	vec4 fogColor;

+	int renderTOPCameraIndex;

+};

+layout(std140) uniform TDCameraInfoBlock {

+	TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];

+};

+struct TDGeneral

+{

+	vec4 ambientColor;

+	vec4 nearFar;

+	vec4 viewport;

+	vec4 viewportRes;

+	vec4 fog;

+	vec4 fogColor;

+};

+layout(std140) uniform TDGeneralBlock {

+	TDGeneral uTDGeneral;

+};

+

+layout(binding = 15) uniform samplerBuffer sTDInstanceT;

+layout(binding = 16) uniform samplerBuffer sTDInstanceTexCoord;

+layout(binding = 17) uniform samplerBuffer sTDInstanceColor;

+#define TD_NUM_BONES 0

+vec4 TDWorldToProj(vec4 v);

+vec4 TDWorldToProj(vec3 v);

+vec4 TDWorldToProj(vec4 v, vec3 uv);

+vec4 TDWorldToProj(vec3 v, vec3 uv);

+int TDPickID();

+int TDInstanceID();

+int TDCameraIndex();

+vec3 TDUVUnwrapCoord();

+vec3 TDInstanceTexCoord(int index, vec3 t) {

+	vec3 v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceTexCoord, coord);

+	v[0] = t.s;

+	v[1] = t.t;

+	v[2] = samp[0];

+    t.stp = v.stp;

+	return t;

+}

+bool TDInstanceActive(int index) {

+	index -= uTDInstanceIDOffset;

+	float v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceT, coord);

+	v = samp[0];

+	return v != 0.0;

+}

+vec3 iTDInstanceTranslate(int index, out bool instanceActive) {

+	int origIndex = index;

+	index -= uTDInstanceIDOffset;

+	vec3 v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceT, coord);

+	v[0] = samp[1];

+	v[1] = samp[2];

+	v[2] = samp[3];

+	instanceActive = samp[0] != 0.0;

+	return v;

+}

+vec3 TDInstanceTranslate(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceT, coord);

+	v[0] = samp[1];

+	v[1] = samp[2];

+	v[2] = samp[3];

+	return v;

+}

+mat3 TDInstanceRotateMat(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(0.0, 0.0, 0.0);

+	mat3 m = mat3(1.0);

+{

+	mat3 r;

+}

+	return m;

+}

+vec3 TDInstanceScale(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(1.0, 1.0, 1.0);

+	return v;

+}

+vec3 TDInstancePivot(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(0.0, 0.0, 0.0);

+	return v;

+}

+vec3 TDInstanceRotTo(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(0.0, 0.0, 1.0);

+	return v;

+}

+vec3 TDInstanceRotUp(int index) {

+	index -= uTDInstanceIDOffset;

+	vec3 v = vec3(0.0, 1.0, 0.0);

+	return v;

+}

+mat4 TDInstanceMat(int id) {

+	bool instanceActive = true;

+	vec3 t = iTDInstanceTranslate(id, instanceActive);

+	if (!instanceActive)

+	{

+		return mat4(0.0);

+	}

+	mat4 m = mat4(1.0);

+	{

+		vec3 tt = t;

+		m[3][0] += m[0][0]*tt.x;

+		m[3][1] += m[0][1]*tt.x;

+		m[3][2] += m[0][2]*tt.x;

+		m[3][3] += m[0][3]*tt.x;

+		m[3][0] += m[1][0]*tt.y;

+		m[3][1] += m[1][1]*tt.y;

+		m[3][2] += m[1][2]*tt.y;

+		m[3][3] += m[1][3]*tt.y;

+		m[3][0] += m[2][0]*tt.z;

+		m[3][1] += m[2][1]*tt.z;

+		m[3][2] += m[2][2]*tt.z;

+		m[3][3] += m[2][3]*tt.z;

+	}

+	return m;

+}

+mat3 TDInstanceMat3(int id) {

+	mat3 m = mat3(1.0);

+	return m;

+}

+mat3 TDInstanceMat3ForNorm(int id) {

+	mat3 m = TDInstanceMat3(id);

+	return m;

+}

+vec4 TDInstanceColor(int index, vec4 curColor) {

+	index -= uTDInstanceIDOffset;

+	vec4 v;

+	int coord = index;

+	vec4 samp = texelFetch(sTDInstanceColor, coord);

+	v[0] = samp[0];

+	v[1] = samp[1];

+	v[2] = samp[2];

+	v[3] = 1.0;

+	curColor[0] = v[0];

+;

+	curColor[1] = v[1];

+;

+	curColor[2] = v[2];

+;

+	return curColor;

+}

+vec4 TDInstanceDeform(int id, vec4 pos) {

+	pos = TDInstanceMat(id) * pos;

+	return uTDMats[TDCameraIndex()].world * pos;

+}

+

+vec3 TDInstanceDeformVec(int id, vec3 vec)

+{

+	mat3 m = TDInstanceMat3(id);

+	return mat3(uTDMats[TDCameraIndex()].world) * (m * vec);

+}

+vec3 TDInstanceDeformNorm(int id, vec3 vec)

+{

+	mat3 m = TDInstanceMat3ForNorm(id);

+	return mat3(uTDMats[TDCameraIndex()].worldForNormals) * (m * vec);

+}

+vec4 TDInstanceDeform(vec4 pos) {

+	return TDInstanceDeform(TDInstanceID(), pos);

+}

+vec3 TDInstanceDeformVec(vec3 vec) {

+	return TDInstanceDeformVec(TDInstanceID(), vec);

+}

+vec3 TDInstanceDeformNorm(vec3 vec) {

+	return TDInstanceDeformNorm(TDInstanceID(), vec);

+}

+bool TDInstanceActive() { return TDInstanceActive(TDInstanceID()); }

+vec3 TDInstanceTranslate() { return TDInstanceTranslate(TDInstanceID()); }

+mat3 TDInstanceRotateMat() { return TDInstanceRotateMat(TDInstanceID()); }

+vec3 TDInstanceScale() { return TDInstanceScale(TDInstanceID()); }

+mat4 TDInstanceMat() { return TDInstanceMat(TDInstanceID());

+ }

+mat3 TDInstanceMat3() { return TDInstanceMat3(TDInstanceID());

+}

+vec3 TDInstanceTexCoord(vec3 t) {

+	return TDInstanceTexCoord(TDInstanceID(), t);

+}

+vec4 TDInstanceColor(vec4 curColor) {

+	return TDInstanceColor(TDInstanceID(), curColor);

+}

+vec4 TDSkinnedDeform(vec4 pos) { return pos; }

+

+vec3 TDSkinnedDeformVec(vec3 vec) { return vec; }

+

+vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm)

+{   return oldTangent.xyz;   }

+mat4 TDBoneMat(int index) {

+   return mat4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);

+}

+vec4 TDDeform(vec4 pos) {

+    pos = TDSkinnedDeform(pos);

+    pos = TDInstanceDeform(pos);

+    return pos;

+}

+

+vec4 TDDeform(int instanceID, vec3 p) {

+	vec4 pos = vec4(p, 1.0);

+    pos = TDSkinnedDeform(pos);

+    pos = TDInstanceDeform(instanceID, pos);

+    return pos;

+}

+

+vec4 TDDeform(vec3 pos) {

+	return TDDeform(TDInstanceID(), pos);

+}

+

+vec3 TDDeformVec(int instanceID, vec3 vec) {

+    vec = TDSkinnedDeformVec(vec);

+    vec = TDInstanceDeformVec(instanceID, vec);

+    return vec;

+}

+

+vec3 TDDeformVec(vec3 vec) {

+	return TDDeformVec(TDInstanceID(), vec);

+}

+

+vec3 TDDeformNorm(int instanceID, vec3 vec) {

+    vec = TDSkinnedDeformVec(vec);

+    vec = TDInstanceDeformNorm(instanceID, vec);

+    return vec;

+}

+

+vec3 TDDeformNorm(vec3 vec) {

+	return TDDeformNorm(TDInstanceID(), vec);

+}

+

+vec3 TDSkinnedDeformNorm(vec3 vec) {

+    vec = TDSkinnedDeformVec(vec);

+	return vec;

+}

diff --git a/Test/vulkan.frag b/Test/vulkan.frag
index 25bfefe..6cf7ccf 100644
--- a/Test/vulkan.frag
+++ b/Test/vulkan.frag
@@ -46,6 +46,9 @@
 layout(binding=2, push_constant) uniform pcbnd1 {  // ERROR, can't have binding

     int a;

 } pcbnd1inst;

+layout(push_constant) uniform pcbnd2 {  // ERROR, can't be array

+    float a;

+} pcbnd2inst[2];

 layout(std430, push_constant) uniform pcb1 { int a; } pcb1inst;

 layout(push_constant) uniform pcb2 {

     int a;

diff --git a/Test/xfbUnsizedArray.error.tese b/Test/xfbUnsizedArray.error.tese
new file mode 100644
index 0000000..a59069b
--- /dev/null
+++ b/Test/xfbUnsizedArray.error.tese
@@ -0,0 +1,8 @@
+#version 430 core
+#extension GL_ARB_enhanced_layouts : require
+layout(isolines, point_mode) in;
+layout (xfb_offset = 0) out vec4 unsized[]; // error: unsized array
+
+void main()
+{
+}
diff --git a/build_info.h.tmpl b/build_info.h.tmpl
index 5b5e9e6..60cb5bb 100644
--- a/build_info.h.tmpl
+++ b/build_info.h.tmpl
@@ -40,23 +40,23 @@
 #define GLSLANG_VERSION_FLAVOR "@flavor@"
 
 #define GLSLANG_VERSION_GREATER_THAN(major, minor, patch) \
-    (((major) > GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \
-    (((minor) > GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \
-     ((patch) > GLSLANG_VERSION_PATCH)))))
+    ((GLSLANG_VERSION_MAJOR) > (major) || ((major) == GLSLANG_VERSION_MAJOR && \
+    ((GLSLANG_VERSION_MINOR) > (minor) || ((minor) == GLSLANG_VERSION_MINOR && \
+     (GLSLANG_VERSION_PATCH) > (patch)))))
 
 #define GLSLANG_VERSION_GREATER_OR_EQUAL_TO(major, minor, patch) \
-    (((major) > GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \
-    (((minor) > GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \
-     ((patch) >= GLSLANG_VERSION_PATCH)))))
+    ((GLSLANG_VERSION_MAJOR) > (major) || ((major) == GLSLANG_VERSION_MAJOR && \
+    ((GLSLANG_VERSION_MINOR) > (minor) || ((minor) == GLSLANG_VERSION_MINOR && \
+     (GLSLANG_VERSION_PATCH >= (patch))))))
 
 #define GLSLANG_VERSION_LESS_THAN(major, minor, patch) \
-    (((major) < GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \
-    (((minor) < GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \
-     ((patch) < GLSLANG_VERSION_PATCH)))))
+    ((GLSLANG_VERSION_MAJOR) < (major) || ((major) == GLSLANG_VERSION_MAJOR && \
+    ((GLSLANG_VERSION_MINOR) < (minor) || ((minor) == GLSLANG_VERSION_MINOR && \
+     (GLSLANG_VERSION_PATCH) < (patch)))))
 
 #define GLSLANG_VERSION_LESS_OR_EQUAL_TO(major, minor, patch) \
-    (((major) < GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \
-    (((minor) < GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \
-     ((patch) <= GLSLANG_VERSION_PATCH)))))
+    ((GLSLANG_VERSION_MAJOR) < (major) || ((major) == GLSLANG_VERSION_MAJOR && \
+    ((GLSLANG_VERSION_MINOR) < (minor) || ((minor) == GLSLANG_VERSION_MINOR && \
+     (GLSLANG_VERSION_PATCH <= (patch))))))
 
 #endif // GLSLANG_BUILD_INFO
diff --git a/build_info.py b/build_info.py
index 7c1998f..06d613b 100755
--- a/build_info.py
+++ b/build_info.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # Copyright (c) 2020 Google Inc.
 #
diff --git a/gen_extension_headers.py b/gen_extension_headers.py
old mode 100644
new mode 100755
index a787f9a..2838c96
--- a/gen_extension_headers.py
+++ b/gen_extension_headers.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # Copyright (c) 2020 Google Inc.
 #
@@ -95,4 +95,4 @@
     generate_main(glsl_files, output_file)

 

 if __name__ == '__main__':

-    main()
\ No newline at end of file
+    main()
diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp
index 4fdeff7..1bb4000 100644
--- a/glslang/CInterface/glslang_c_interface.cpp
+++ b/glslang/CInterface/glslang_c_interface.cpp
@@ -38,6 +38,7 @@
 
 #include "glslang/Include/ResourceLimits.h"
 #include "glslang/MachineIndependent/Versions.h"
+#include "glslang/MachineIndependent/localintermediate.h"
 
 static_assert(int(GLSLANG_STAGE_COUNT) == EShLangCount, "");
 static_assert(int(GLSLANG_STAGE_MASK_COUNT) == EShLanguageMaskCount, "");
@@ -191,10 +192,10 @@
         return EShLangMiss;
     case GLSLANG_STAGE_CALLABLE_NV:
         return EShLangCallable;
-    case GLSLANG_STAGE_TASK_NV:
-        return EShLangTaskNV;
-    case GLSLANG_STAGE_MESH_NV:
-        return EShLangMeshNV;
+    case GLSLANG_STAGE_TASK:
+        return EShLangTask;
+    case GLSLANG_STAGE_MESH:
+        return EShLangMesh;
     default:
         break;
     }
@@ -244,6 +245,8 @@
         return glslang::EShTargetSpv_1_4;
     case GLSLANG_TARGET_SPV_1_5:
         return glslang::EShTargetSpv_1_5;
+    case GLSLANG_TARGET_SPV_1_6:
+        return glslang::EShTargetSpv_1_6;
     default:
         break;
     }
@@ -271,6 +274,8 @@
         return glslang::EShTargetVulkan_1_1;
     case GLSLANG_TARGET_VULKAN_1_2:
         return glslang::EShTargetVulkan_1_2;
+    case GLSLANG_TARGET_VULKAN_1_3:
+        return glslang::EShTargetVulkan_1_3;
     case GLSLANG_TARGET_OPENGL_450:
         return glslang::EShTargetOpenGL_450;
     default:
@@ -346,6 +351,42 @@
     return shader;
 }
 
+GLSLANG_EXPORT void glslang_shader_set_preamble(glslang_shader_t* shader, const char* s) {
+    shader->shader->setPreamble(s);
+}
+
+GLSLANG_EXPORT void glslang_shader_shift_binding(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base)
+{
+    const glslang::TResourceType res_type = glslang::TResourceType(res);
+    shader->shader->setShiftBinding(res_type, base);
+}
+
+GLSLANG_EXPORT void glslang_shader_shift_binding_for_set(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base, unsigned int set)
+{
+    const glslang::TResourceType res_type = glslang::TResourceType(res);
+    shader->shader->setShiftBindingForSet(res_type, base, set);
+}
+
+GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int options)
+{
+    if (options & GLSLANG_SHADER_AUTO_MAP_BINDINGS) {
+        shader->shader->setAutoMapBindings(true);
+    }
+
+    if (options & GLSLANG_SHADER_AUTO_MAP_LOCATIONS) {
+        shader->shader->setAutoMapLocations(true);
+    }
+
+    if (options & GLSLANG_SHADER_VULKAN_RULES_RELAXED) {
+        shader->shader->setEnvInputVulkanRulesRelaxed();
+    }
+}
+
+GLSLANG_EXPORT void glslang_shader_set_glsl_version(glslang_shader_t* shader, int version)
+{
+    shader->shader->setOverrideVersion(version);
+}
+
 GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
 {
     return shader->preprocessedGLSL.c_str();
@@ -419,6 +460,21 @@
     return (int)program->program->link((EShMessages)messages);
 }
 
+GLSLANG_EXPORT void glslang_program_add_source_text(glslang_program_t* program, glslang_stage_t stage, const char* text, size_t len) {
+    glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
+    intermediate->addSourceText(text, len);
+}
+
+GLSLANG_EXPORT void glslang_program_set_source_file(glslang_program_t* program, glslang_stage_t stage, const char* file) {
+    glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
+    intermediate->setSourceFile(file);
+}
+
+GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program)
+{
+    return (int)program->program->mapIO();
+}
+
 GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program)
 {
     return program->program->getInfoLog();
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index d0394c8..72e82b4 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -200,19 +200,29 @@
 # install
 ################################################################################
 if(ENABLE_GLSLANG_INSTALL)
-    if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang
-                EXPORT  glslangTargets
-                ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-    else()
-        install(TARGETS glslang MachineIndependent GenericCodeGen
-                EXPORT  glslangTargets
-                ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-    endif()
+    install(TARGETS glslang EXPORT glslang-targets)
+    if(NOT BUILD_SHARED_LIBS)
+        install(TARGETS MachineIndependent EXPORT glslang-targets)
+        install(TARGETS GenericCodeGen EXPORT glslang-targets)
 
-    install(EXPORT glslangTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+        # 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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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}
diff --git a/glslang/HLSL/hlslGrammar.cpp b/glslang/HLSL/hlslGrammar.cpp
index bd4af92..a01f240 100644
--- a/glslang/HLSL/hlslGrammar.cpp
+++ b/glslang/HLSL/hlslGrammar.cpp
@@ -3428,7 +3428,7 @@
         }
     }
     if (compoundStatement)
-        compoundStatement->setOperator(EOpSequence);
+        compoundStatement->setOperator(intermediate.getDebugInfo() ? EOpScope : EOpSequence);
 
     retStatement = compoundStatement;
 
diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp
index 39b3eca..62e46a0 100644
--- a/glslang/HLSL/hlslParseHelper.cpp
+++ b/glslang/HLSL/hlslParseHelper.cpp
@@ -1754,6 +1754,18 @@
                 intermediate.setLocalSize(lid, sequence[lid]->getAsConstantUnion()->getConstArray()[0].getIConst());
             break;
         }
+        case EatInstance: 
+        {
+            int invocations;
+
+            if (!it->getInt(invocations)) {
+                error(loc, "invalid instance", "", "");
+            } else {
+                if (!intermediate.setInvocations(invocations))
+                    error(loc, "cannot change previously set instance attribute", "", "");
+            }
+            break;
+        }
         case EatMaxVertexCount:
         {
             int maxVertexCount;
@@ -2167,8 +2179,21 @@
         TIntermSymbol* arg = intermediate.addSymbol(*argVars.back());
         handleFunctionArgument(&callee, callingArgs, arg);
         if (param.type->getQualifier().isParamInput()) {
-            intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg,
-                                                               intermediate.addSymbol(**inputIt)));
+            TIntermTyped* input = intermediate.addSymbol(**inputIt);
+            if (input->getType().getQualifier().builtIn == EbvFragCoord && intermediate.getDxPositionW()) {
+                // Replace FragCoord W with reciprocal
+                auto pos_xyz = handleDotDereference(loc, input, "xyz");
+                auto pos_w   = handleDotDereference(loc, input, "w");
+                auto one     = intermediate.addConstantUnion(1.0, EbtFloat, loc);
+                auto recip_w = intermediate.addBinaryMath(EOpDiv, one, pos_w, loc);
+                TIntermAggregate* dst = new TIntermAggregate(EOpConstructVec4);
+                dst->getSequence().push_back(pos_xyz);
+                dst->getSequence().push_back(recip_w);
+                dst->setType(TType(EbtFloat, EvqTemporary, 4));
+                dst->setLoc(loc);
+                input = dst;
+            }
+            intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg, input));
             inputIt++;
         }
         if (param.type->getQualifier().storage == EvqUniform) {
@@ -2417,6 +2442,11 @@
             clearUniformInputOutput(function[i].type->getQualifier());
 }
 
+TIntermNode* HlslParseContext::handleDeclare(const TSourceLoc& loc, TIntermTyped* var)
+{
+    return intermediate.addUnaryNode(EOpDeclare, var, loc, TType(EbtVoid));
+}
+
 // Handle function returns, including type conversions to the function return type
 // if necessary.
 TIntermNode* HlslParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value)
@@ -2452,6 +2482,62 @@
         arguments = newArg;
 }
 
+// FragCoord may require special loading: we can optionally reciprocate W.
+TIntermTyped* HlslParseContext::assignFromFragCoord(const TSourceLoc& loc, TOperator op,
+                                                    TIntermTyped* left, TIntermTyped* right)
+{
+    // If we are not asked for reciprocal W, use a plain old assign.
+    if (!intermediate.getDxPositionW())
+        return intermediate.addAssign(op, left, right, loc);
+
+    // If we get here, we should reciprocate W.
+    TIntermAggregate* assignList = nullptr;
+
+    // If this is a complex rvalue, we don't want to dereference it many times.  Create a temporary.
+    TVariable* rhsTempVar = nullptr;
+    rhsTempVar = makeInternalVariable("@fragcoord", right->getType());
+    rhsTempVar->getWritableType().getQualifier().makeTemporary();
+
+    {
+        TIntermTyped* rhsTempSym = intermediate.addSymbol(*rhsTempVar, loc);
+        assignList = intermediate.growAggregate(assignList,
+            intermediate.addAssign(EOpAssign, rhsTempSym, right, loc), loc);
+    }
+
+    // tmp.w = 1.0 / tmp.w
+    {
+        const int W = 3;
+
+        TIntermTyped* tempSymL = intermediate.addSymbol(*rhsTempVar, loc);
+        TIntermTyped* tempSymR = intermediate.addSymbol(*rhsTempVar, loc);
+        TIntermTyped* index = intermediate.addConstantUnion(W, loc);
+
+        TIntermTyped* lhsElement = intermediate.addIndex(EOpIndexDirect, tempSymL, index, loc);
+        TIntermTyped* rhsElement = intermediate.addIndex(EOpIndexDirect, tempSymR, index, loc);
+
+        const TType derefType(right->getType(), 0);
+
+        lhsElement->setType(derefType);
+        rhsElement->setType(derefType);
+
+        auto one     = intermediate.addConstantUnion(1.0, EbtFloat, loc);
+        auto recip_w = intermediate.addBinaryMath(EOpDiv, one, rhsElement, loc);
+
+        assignList = intermediate.growAggregate(assignList, intermediate.addAssign(EOpAssign, lhsElement, recip_w, loc));
+    }
+
+    // Assign the rhs temp (now with W reciprocal) to the final output
+    {
+        TIntermTyped* rhsTempSym = intermediate.addSymbol(*rhsTempVar, loc);
+        assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, left, rhsTempSym, loc));
+    }
+
+    assert(assignList != nullptr);
+    assignList->setOperator(EOpSequence);
+
+    return assignList;
+}
+
 // Position may require special handling: we can optionally invert Y.
 // See: https://github.com/KhronosGroup/glslang/issues/1173
 //      https://github.com/KhronosGroup/glslang/issues/494
@@ -3071,6 +3157,10 @@
                                                                               subSplitLeft, subSplitRight);
 
                     assignList = intermediate.growAggregate(assignList, clipCullAssign, loc);
+                } else if (subSplitRight->getType().getQualifier().builtIn == EbvFragCoord) {
+                    // FragCoord can require special handling: see comment above assignFromFragCoord
+                    TIntermTyped* fragCoordAssign = assignFromFragCoord(loc, op, subSplitLeft, subSplitRight);
+                    assignList = intermediate.growAggregate(assignList, fragCoordAssign, loc);
                 } else if (assignsClipPos(subSplitLeft)) {
                     // Position can require special handling: see comment above assignPosition
                     TIntermTyped* positionAssign = assignPosition(loc, op, subSplitLeft, subSplitRight);
@@ -5357,7 +5447,7 @@
         }
     case EOpWavePrefixCountBits:
         {
-            // Mapped to subgroupBallotInclusiveBitCount(subgroupBallot())
+            // Mapped to subgroupBallotExclusiveBitCount(subgroupBallot())
             // builtin
 
             // uvec4 type.
@@ -5371,7 +5461,7 @@
             TType uintType(EbtUint, EvqTemporary);
 
             node = intermediate.addBuiltInFunctionCall(loc,
-                EOpSubgroupBallotInclusiveBitCount, true, res, uintType);
+                EOpSubgroupBallotExclusiveBitCount, true, res, uintType);
 
             break;
         }
@@ -6935,6 +7025,9 @@
         if (lhs.isStruct() != rhs.isStruct())
             return false;
 
+        if (lhs.getQualifier().builtIn != rhs.getQualifier().builtIn)
+            return false;
+
         if (lhs.isStruct() && rhs.isStruct()) {
             if (lhs.getStruct()->size() != rhs.getStruct()->size())
                 return false;
@@ -7947,11 +8040,16 @@
     if (flattenVar)
         flatten(*symbol->getAsVariable(), symbolTable.atGlobalLevel());
 
-    if (initializer == nullptr)
-        return nullptr;
+    TVariable* variable = symbol->getAsVariable();
+
+    if (initializer == nullptr) {
+        if (intermediate.getDebugInfo())
+            return executeDeclaration(loc, variable);
+        else
+            return nullptr;
+    }
 
     // Deal with initializer
-    TVariable* variable = symbol->getAsVariable();
     if (variable == nullptr) {
         error(loc, "initializer requires a variable, not a member", identifier.c_str(), "");
         return nullptr;
@@ -8018,6 +8116,24 @@
     return nullptr;
 }
 
+// Return a declaration of a temporary variable
+//
+// This is used to force a variable to be declared in the correct scope
+// when debug information is being generated.
+
+TIntermNode* HlslParseContext::executeDeclaration(const TSourceLoc& loc, TVariable* variable)
+{
+  //
+  // Identifier must be of type temporary.
+  //
+  TStorageQualifier qualifier = variable->getType().getQualifier().storage;
+  if (qualifier != EvqTemporary)
+      return nullptr;
+
+  TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc);
+  return handleDeclare(loc, intermSymbol);
+}
+
 //
 // Handle all types of initializers from the grammar.
 //
diff --git a/glslang/HLSL/hlslParseHelper.h b/glslang/HLSL/hlslParseHelper.h
index 2d7165c..96d85f4 100644
--- a/glslang/HLSL/hlslParseHelper.h
+++ b/glslang/HLSL/hlslParseHelper.h
@@ -87,6 +87,7 @@
     void handleFunctionBody(const TSourceLoc&, TFunction&, TIntermNode* functionBody, TIntermNode*& node);
     void remapEntryPointIO(TFunction& function, TVariable*& returnValue, TVector<TVariable*>& inputs, TVector<TVariable*>& outputs);
     void remapNonEntryPointIO(TFunction& function);
+    TIntermNode* handleDeclare(const TSourceLoc&, TIntermTyped*);
     TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*);
     void handleFunctionArgument(TFunction*, TIntermTyped*& arguments, TIntermTyped* newArg);
     TIntermTyped* handleAssign(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
@@ -94,6 +95,7 @@
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermTyped*);
     TIntermAggregate* assignClipCullDistance(const TSourceLoc&, TOperator, int semanticId, TIntermTyped* left, TIntermTyped* right);
     TIntermTyped* assignPosition(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
+    TIntermTyped* assignFromFragCoord(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
     void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     void decomposeStructBufferMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
@@ -242,6 +244,7 @@
     TIntermSymbol* makeInternalVariableNode(const TSourceLoc&, const char* name, const TType&) const;
     TVariable* declareNonArray(const TSourceLoc&, const TString& identifier, const TType&, bool track);
     void declareArray(const TSourceLoc&, const TString& identifier, const TType&, TSymbol*&, bool track);
+    TIntermNode* executeDeclaration(const TSourceLoc&, TVariable* variable);
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer, TIntermTyped* scalarInit);
     bool isScalarConstructor(const TIntermNode*);
diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index c8203c2..156d98b 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -105,6 +105,8 @@
     EvqCallableData,
     EvqCallableDataIn,
 
+    EvqtaskPayloadSharedEXT,
+
     // parameters
     EvqIn,            // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter
     EvqOut,           // also, for 'out' in the grammar before we know if it's a pipeline output or an 'out' parameter
@@ -128,6 +130,7 @@
     // built-ins written by fragment shader
     EvqFragColor,
     EvqFragDepth,
+    EvqFragStencil,
 
     // end of list
     EvqLast
@@ -263,6 +266,7 @@
     EbvObjectRayDirection,
     EbvRayTmin,
     EbvRayTmax,
+    EbvCullMask,
     EbvHitT,
     EbvHitKind,
     EbvObjectToWorld,
@@ -274,6 +278,8 @@
     // barycentrics
     EbvBaryCoordNV,
     EbvBaryCoordNoPerspNV,
+    EbvBaryCoordEXT,
+    EbvBaryCoordNoPerspEXT,
     // mesh shaders
     EbvTaskCountNV,
     EbvPrimitiveCountNV,
@@ -283,6 +289,11 @@
     EbvLayerPerViewNV,
     EbvMeshViewCountNV,
     EbvMeshViewIndicesNV,
+    //GL_EXT_mesh_shader
+    EbvPrimitivePointIndicesEXT,
+    EbvPrimitiveLineIndicesEXT,
+    EbvPrimitiveTriangleIndicesEXT,
+    EbvCullPrimitiveEXT,
 
     // sm builtins
     EbvWarpsPerSM,
@@ -350,11 +361,13 @@
     case EvqPointCoord:     return "gl_PointCoord";  break;
     case EvqFragColor:      return "fragColor";      break;
     case EvqFragDepth:      return "gl_FragDepth";   break;
+    case EvqFragStencil:    return "gl_FragStencilRefARB"; break;
     case EvqPayload:        return "rayPayloadNV";     break;
     case EvqPayloadIn:      return "rayPayloadInNV";   break;
     case EvqHitAttr:        return "hitAttributeNV";   break;
     case EvqCallableData:   return "callableDataNV";   break;
     case EvqCallableDataIn: return "callableDataInNV"; break;
+    case EvqtaskPayloadSharedEXT: return "taskPayloadSharedEXT"; break;
     default:                return "unknown qualifier";
     }
 }
@@ -478,8 +491,10 @@
     case EbvWorldToObject:              return "WorldToObjectNV";
     case EbvCurrentRayTimeNV:           return "CurrentRayTimeNV";
 
-    case EbvBaryCoordNV:                return "BaryCoordNV";
-    case EbvBaryCoordNoPerspNV:         return "BaryCoordNoPerspNV";
+    case EbvBaryCoordEXT:
+    case EbvBaryCoordNV:                return "BaryCoordKHR";
+    case EbvBaryCoordNoPerspEXT:
+    case EbvBaryCoordNoPerspNV:         return "BaryCoordNoPerspKHR";
 
     case EbvTaskCountNV:                return "TaskCountNV";
     case EbvPrimitiveCountNV:           return "PrimitiveCountNV";
@@ -489,6 +504,11 @@
     case EbvLayerPerViewNV:             return "LayerPerViewNV";
     case EbvMeshViewCountNV:            return "MeshViewCountNV";
     case EbvMeshViewIndicesNV:          return "MeshViewIndicesNV";
+    // GL_EXT_mesh_shader
+    case EbvPrimitivePointIndicesEXT:    return "PrimitivePointIndicesEXT";
+    case EbvPrimitiveLineIndicesEXT:     return "PrimitiveLineIndicesEXT";
+    case EbvPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT";
+    case EbvCullPrimitiveEXT:            return "CullPrimitiveEXT";
 
     case EbvWarpsPerSM:                 return "WarpsPerSMNV";
     case EbvSMCount:                    return "SMCountNV";
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index e7b5e07..a5b41cb 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -39,6 +39,11 @@
 
 #include <algorithm>
 #include <cassert>
+#ifdef _MSC_VER
+#include <cfloat>
+#else
+#include <cmath>
+#endif
 #include <cstdio>
 #include <cstdlib>
 #include <list>
@@ -61,7 +66,7 @@
 }
 #endif
 
-#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || MINGW_HAS_SECURE_API
+#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API)
     #include <basetsd.h>
     #ifndef snprintf
     #define snprintf sprintf_s
@@ -213,7 +218,7 @@
 //
 // Create a TString object from an integer.
 //
-#if defined _MSC_VER || MINGW_HAS_SECURE_API
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API)
 inline const TString String(const int i, const int base = 10)
 {
     char text[16];     // 32 bit ints are at most 10 digits in base 10
@@ -302,6 +307,34 @@
     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/ResourceLimits.h b/glslang/Include/ResourceLimits.h
index b670cf1..b36c8d6 100644
--- a/glslang/Include/ResourceLimits.h
+++ b/glslang/Include/ResourceLimits.h
@@ -142,6 +142,15 @@
     int maxTaskWorkGroupSizeY_NV;
     int maxTaskWorkGroupSizeZ_NV;
     int maxMeshViewCountNV;
+    int maxMeshOutputVerticesEXT;
+    int maxMeshOutputPrimitivesEXT;
+    int maxMeshWorkGroupSizeX_EXT;
+    int maxMeshWorkGroupSizeY_EXT;
+    int maxMeshWorkGroupSizeZ_EXT;
+    int maxTaskWorkGroupSizeX_EXT;
+    int maxTaskWorkGroupSizeY_EXT;
+    int maxTaskWorkGroupSizeZ_EXT;
+    int maxMeshViewCountEXT;
     int maxDualSourceDrawBuffersEXT;
 
     TLimits limits;
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index e87f258..a6f47e8 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -443,6 +443,18 @@
     EldCount
 };
 
+enum TLayoutStencil {
+    ElsNone,
+    ElsRefUnchangedFrontAMD,
+    ElsRefGreaterFrontAMD,
+    ElsRefLessFrontAMD,
+    ElsRefUnchangedBackAMD,
+    ElsRefGreaterBackAMD,
+    ElsRefLessBackAMD,
+
+    ElsCount
+};
+
 enum TBlendEquationShift {
     // No 'EBlendNone':
     // These are used as bit-shift amounts.  A mask of such shifts will have type 'int',
@@ -552,6 +564,7 @@
         perViewNV = false;
         perTaskNV = false;
 #endif
+        pervertexEXT = false;
     }
 
     void clearMemory()
@@ -604,7 +617,8 @@
     bool isNoContraction() const { return false; }
     void setNoContraction() { }
     bool isPervertexNV() const { return false; }
-    void setNullInit() { }
+    bool isPervertexEXT() const { return pervertexEXT; }
+    void setNullInit() {}
     bool isNullInit() const { return false; }
     void setSpirvByReference() { }
     bool isSpirvByReference() { return false; }
@@ -615,6 +629,7 @@
     bool nopersp      : 1;
     bool explicitInterp : 1;
     bool pervertexNV  : 1;
+    bool pervertexEXT : 1;
     bool perPrimitiveNV : 1;
     bool perViewNV : 1;
     bool perTaskNV : 1;
@@ -663,12 +678,13 @@
     }
     bool isAuxiliary() const
     {
-        return centroid || patch || sample || pervertexNV;
+        return centroid || patch || sample || pervertexNV || pervertexEXT;
     }
     bool isPatch() const { return patch; }
     bool isNoContraction() const { return noContraction; }
     void setNoContraction() { noContraction = true; }
     bool isPervertexNV() const { return pervertexNV; }
+    bool isPervertexEXT() const { return pervertexEXT; }
     void setNullInit() { nullInit = true; }
     bool isNullInit() const { return nullInit; }
     void setSpirvByReference() { spirvByReference = true; }
@@ -701,6 +717,7 @@
         case EvqVaryingOut:
         case EvqFragColor:
         case EvqFragDepth:
+        case EvqFragStencil:
             return true;
         default:
             return false;
@@ -768,6 +785,7 @@
         case EvqVaryingOut:
         case EvqFragColor:
         case EvqFragDepth:
+        case EvqFragStencil:
             return true;
         default:
             return false;
@@ -815,7 +833,7 @@
             }
             storage = EvqUniform;
             break;
-        case EbsStorageBuffer : 
+        case EbsStorageBuffer :
             storage = EvqBuffer;
             break;
 #ifndef GLSLANG_WEB
@@ -838,6 +856,7 @@
     bool isPerPrimitive() const { return perPrimitiveNV; }
     bool isPerView() const { return perViewNV; }
     bool isTaskMemory() const { return perTaskNV; }
+    bool isTaskPayload() const { return storage == EvqtaskPayloadSharedEXT; }
     bool isAnyPayload() const {
         return storage == EvqPayload || storage == EvqPayloadIn;
     }
@@ -856,8 +875,8 @@
         case EShLangTessEvaluation:
             return ! patch && isPipeInput();
         case EShLangFragment:
-            return pervertexNV && isPipeInput();
-        case EShLangMeshNV:
+            return (pervertexNV || pervertexEXT) && isPipeInput();
+        case EShLangMesh:
             return ! perTaskNV && isPipeOutput();
 
         default:
@@ -1235,6 +1254,18 @@
         default:           return "none";
         }
     }
+    static const char* getLayoutStencilString(TLayoutStencil s)
+    {
+        switch (s) {
+        case ElsRefUnchangedFrontAMD: return "stencil_ref_unchanged_front_amd";
+        case ElsRefGreaterFrontAMD:   return "stencil_ref_greater_front_amd";
+        case ElsRefLessFrontAMD:      return "stencil_ref_less_front_amd";
+        case ElsRefUnchangedBackAMD:  return "stencil_ref_unchanged_back_amd";
+        case ElsRefGreaterBackAMD:    return "stencil_ref_greater_back_amd";
+        case ElsRefLessBackAMD:       return "stencil_ref_less_back_amd";
+        default:                      return "none";
+        }
+    }
     static const char* getBlendEquationString(TBlendEquationShift e)
     {
         switch (e) {
@@ -1332,7 +1363,9 @@
 #ifndef GLSLANG_WEB
     bool earlyFragmentTests;  // fragment input
     bool postDepthCoverage;   // fragment input
+    bool earlyAndLateFragmentTestsAMD; //fragment input
     TLayoutDepth layoutDepth;
+    TLayoutStencil layoutStencil;
     bool blendEquation;       // true if any blend equation was specified
     int numViews;             // multiview extenstions
     TInterlockOrdering interlockOrdering;
@@ -1342,6 +1375,7 @@
     int primitives;                     // mesh shader "max_primitives"DerivativeGroupLinear;   // true if layout derivative_group_linearNV set
     bool layoutPrimitiveCulling;        // true if layout primitive_culling set
     TLayoutDepth getDepth() const { return layoutDepth; }
+    TLayoutStencil getStencil() const { return layoutStencil; }
 #else
     TLayoutDepth getDepth() const { return EldNone; }
 #endif
@@ -1367,8 +1401,10 @@
         localSizeSpecId[2] = TQualifier::layoutNotSet;
 #ifndef GLSLANG_WEB
         earlyFragmentTests = false;
+        earlyAndLateFragmentTestsAMD = false;
         postDepthCoverage = false;
         layoutDepth = EldNone;
+        layoutStencil = ElsNone;
         blendEquation = false;
         numViews = TQualifier::layoutNotSet;
         layoutOverrideCoverage      = false;
@@ -1420,10 +1456,14 @@
 #ifndef GLSLANG_WEB
         if (src.earlyFragmentTests)
             earlyFragmentTests = true;
+        if (src.earlyAndLateFragmentTestsAMD)
+            earlyAndLateFragmentTestsAMD = true;
         if (src.postDepthCoverage)
             postDepthCoverage = true;
         if (src.layoutDepth)
             layoutDepth = src.layoutDepth;
+        if (src.layoutStencil)
+            layoutStencil = src.layoutStencil;
         if (src.blendEquation)
             blendEquation = src.blendEquation;
         if (src.numViews != TQualifier::layoutNotSet)
@@ -1865,10 +1905,12 @@
     bool isAtomic() const { return false; }
     bool isCoopMat() const { return false; }
     bool isReference() const { return false; }
+    bool isSpirvType() const { return false; }
 #else
     bool isAtomic() const { return basicType == EbtAtomicUint; }
     bool isCoopMat() const { return coopmat; }
     bool isReference() const { return getBasicType() == EbtReference; }
+    bool isSpirvType() const { return getBasicType() == EbtSpirvType; }
 #endif
 
     // return true if this type contains any subtype which satisfies the given predicate.
@@ -2140,7 +2182,8 @@
     const char* getPrecisionQualifierString() const { return ""; }
     TString getBasicTypeString() const { return ""; }
 #else
-    TString getCompleteString() const
+    TString getCompleteString(bool syntactic = false, bool getQualifiers = true, bool getPrecision = true,
+                              bool getType = true, TString name = "", TString structName = "") const
     {
         TString typeString;
 
@@ -2148,232 +2191,337 @@
         const auto appendUint = [&](unsigned int u) { typeString.append(std::to_string(u).c_str()); };
         const auto appendInt  = [&](int i)          { typeString.append(std::to_string(i).c_str()); };
 
-        if (qualifier.hasSprivDecorate())
+        if (getQualifiers) {
+          if (qualifier.hasSprivDecorate())
             appendStr(qualifier.getSpirvDecorateQualifierString().c_str());
 
-        if (qualifier.hasLayout()) {
+          if (qualifier.hasLayout()) {
             // To reduce noise, skip this if the only layout is an xfb_buffer
             // with no triggering xfb_offset.
             TQualifier noXfbBuffer = qualifier;
             noXfbBuffer.layoutXfbBuffer = TQualifier::layoutXfbBufferEnd;
             if (noXfbBuffer.hasLayout()) {
-                appendStr("layout(");
-                if (qualifier.hasAnyLocation()) {
-                    appendStr(" location=");
-                    appendUint(qualifier.layoutLocation);
-                    if (qualifier.hasComponent()) {
-                        appendStr(" component=");
-                        appendUint(qualifier.layoutComponent);
-                    }
-                    if (qualifier.hasIndex()) {
-                        appendStr(" index=");
-                        appendUint(qualifier.layoutIndex);
-                    }
+              appendStr("layout(");
+              if (qualifier.hasAnyLocation()) {
+                appendStr(" location=");
+                appendUint(qualifier.layoutLocation);
+                if (qualifier.hasComponent()) {
+                  appendStr(" component=");
+                  appendUint(qualifier.layoutComponent);
                 }
-                if (qualifier.hasSet()) {
-                    appendStr(" set=");
-                    appendUint(qualifier.layoutSet);
+                if (qualifier.hasIndex()) {
+                  appendStr(" index=");
+                  appendUint(qualifier.layoutIndex);
                 }
-                if (qualifier.hasBinding()) {
-                    appendStr(" binding=");
-                    appendUint(qualifier.layoutBinding);
-                }
-                if (qualifier.hasStream()) {
-                    appendStr(" stream=");
-                    appendUint(qualifier.layoutStream);
-                }
-                if (qualifier.hasMatrix()) {
-                    appendStr(" ");
-                    appendStr(TQualifier::getLayoutMatrixString(qualifier.layoutMatrix));
-                }
-                if (qualifier.hasPacking()) {
-                    appendStr(" ");
-                    appendStr(TQualifier::getLayoutPackingString(qualifier.layoutPacking));
-                }
-                if (qualifier.hasOffset()) {
-                    appendStr(" offset=");
-                    appendInt(qualifier.layoutOffset);
-                }
-                if (qualifier.hasAlign()) {
-                    appendStr(" align=");
-                    appendInt(qualifier.layoutAlign);
-                }
-                if (qualifier.hasFormat()) {
-                    appendStr(" ");
-                    appendStr(TQualifier::getLayoutFormatString(qualifier.layoutFormat));
-                }
-                if (qualifier.hasXfbBuffer() && qualifier.hasXfbOffset()) {
-                    appendStr(" xfb_buffer=");
-                    appendUint(qualifier.layoutXfbBuffer);
-                }
-                if (qualifier.hasXfbOffset()) {
-                    appendStr(" xfb_offset=");
-                    appendUint(qualifier.layoutXfbOffset);
-                }
-                if (qualifier.hasXfbStride()) {
-                    appendStr(" xfb_stride=");
-                    appendUint(qualifier.layoutXfbStride);
-                }
-                if (qualifier.hasAttachment()) {
-                    appendStr(" input_attachment_index=");
-                    appendUint(qualifier.layoutAttachment);
-                }
-                if (qualifier.hasSpecConstantId()) {
-                    appendStr(" constant_id=");
-                    appendUint(qualifier.layoutSpecConstantId);
-                }
-                if (qualifier.layoutPushConstant)
-                    appendStr(" push_constant");
-                if (qualifier.layoutBufferReference)
-                    appendStr(" buffer_reference");
-                if (qualifier.hasBufferReferenceAlign()) {
-                    appendStr(" buffer_reference_align=");
-                    appendUint(1u << qualifier.layoutBufferReferenceAlign);
-                }
+              }
+              if (qualifier.hasSet()) {
+                appendStr(" set=");
+                appendUint(qualifier.layoutSet);
+              }
+              if (qualifier.hasBinding()) {
+                appendStr(" binding=");
+                appendUint(qualifier.layoutBinding);
+              }
+              if (qualifier.hasStream()) {
+                appendStr(" stream=");
+                appendUint(qualifier.layoutStream);
+              }
+              if (qualifier.hasMatrix()) {
+                appendStr(" ");
+                appendStr(TQualifier::getLayoutMatrixString(qualifier.layoutMatrix));
+              }
+              if (qualifier.hasPacking()) {
+                appendStr(" ");
+                appendStr(TQualifier::getLayoutPackingString(qualifier.layoutPacking));
+              }
+              if (qualifier.hasOffset()) {
+                appendStr(" offset=");
+                appendInt(qualifier.layoutOffset);
+              }
+              if (qualifier.hasAlign()) {
+                appendStr(" align=");
+                appendInt(qualifier.layoutAlign);
+              }
+              if (qualifier.hasFormat()) {
+                appendStr(" ");
+                appendStr(TQualifier::getLayoutFormatString(qualifier.layoutFormat));
+              }
+              if (qualifier.hasXfbBuffer() && qualifier.hasXfbOffset()) {
+                appendStr(" xfb_buffer=");
+                appendUint(qualifier.layoutXfbBuffer);
+              }
+              if (qualifier.hasXfbOffset()) {
+                appendStr(" xfb_offset=");
+                appendUint(qualifier.layoutXfbOffset);
+              }
+              if (qualifier.hasXfbStride()) {
+                appendStr(" xfb_stride=");
+                appendUint(qualifier.layoutXfbStride);
+              }
+              if (qualifier.hasAttachment()) {
+                appendStr(" input_attachment_index=");
+                appendUint(qualifier.layoutAttachment);
+              }
+              if (qualifier.hasSpecConstantId()) {
+                appendStr(" constant_id=");
+                appendUint(qualifier.layoutSpecConstantId);
+              }
+              if (qualifier.layoutPushConstant)
+                appendStr(" push_constant");
+              if (qualifier.layoutBufferReference)
+                appendStr(" buffer_reference");
+              if (qualifier.hasBufferReferenceAlign()) {
+                appendStr(" buffer_reference_align=");
+                appendUint(1u << qualifier.layoutBufferReferenceAlign);
+              }
 
-                if (qualifier.layoutPassthrough)
-                    appendStr(" passthrough");
-                if (qualifier.layoutViewportRelative)
-                    appendStr(" layoutViewportRelative");
-                if (qualifier.layoutSecondaryViewportRelativeOffset != -2048) {
-                    appendStr(" layoutSecondaryViewportRelativeOffset=");
-                    appendInt(qualifier.layoutSecondaryViewportRelativeOffset);
-                }
-                if (qualifier.layoutShaderRecord)
-                    appendStr(" shaderRecordNV");
+              if (qualifier.layoutPassthrough)
+                appendStr(" passthrough");
+              if (qualifier.layoutViewportRelative)
+                appendStr(" layoutViewportRelative");
+              if (qualifier.layoutSecondaryViewportRelativeOffset != -2048) {
+                appendStr(" layoutSecondaryViewportRelativeOffset=");
+                appendInt(qualifier.layoutSecondaryViewportRelativeOffset);
+              }
+              if (qualifier.layoutShaderRecord)
+                appendStr(" shaderRecordNV");
 
-                appendStr(")");
+              appendStr(")");
             }
-        }
+          }
 
-        if (qualifier.invariant)
+          if (qualifier.invariant)
             appendStr(" invariant");
-        if (qualifier.noContraction)
+          if (qualifier.noContraction)
             appendStr(" noContraction");
-        if (qualifier.centroid)
+          if (qualifier.centroid)
             appendStr(" centroid");
-        if (qualifier.smooth)
+          if (qualifier.smooth)
             appendStr(" smooth");
-        if (qualifier.flat)
+          if (qualifier.flat)
             appendStr(" flat");
-        if (qualifier.nopersp)
+          if (qualifier.nopersp)
             appendStr(" noperspective");
-        if (qualifier.explicitInterp)
+          if (qualifier.explicitInterp)
             appendStr(" __explicitInterpAMD");
-        if (qualifier.pervertexNV)
+          if (qualifier.pervertexNV)
             appendStr(" pervertexNV");
-        if (qualifier.perPrimitiveNV)
+          if (qualifier.pervertexEXT)
+              appendStr(" pervertexEXT");
+          if (qualifier.perPrimitiveNV)
             appendStr(" perprimitiveNV");
-        if (qualifier.perViewNV)
+          if (qualifier.perViewNV)
             appendStr(" perviewNV");
-        if (qualifier.perTaskNV)
+          if (qualifier.perTaskNV)
             appendStr(" taskNV");
-        if (qualifier.patch)
+          if (qualifier.patch)
             appendStr(" patch");
-        if (qualifier.sample)
+          if (qualifier.sample)
             appendStr(" sample");
-        if (qualifier.coherent)
+          if (qualifier.coherent)
             appendStr(" coherent");
-        if (qualifier.devicecoherent)
+          if (qualifier.devicecoherent)
             appendStr(" devicecoherent");
-        if (qualifier.queuefamilycoherent)
+          if (qualifier.queuefamilycoherent)
             appendStr(" queuefamilycoherent");
-        if (qualifier.workgroupcoherent)
+          if (qualifier.workgroupcoherent)
             appendStr(" workgroupcoherent");
-        if (qualifier.subgroupcoherent)
+          if (qualifier.subgroupcoherent)
             appendStr(" subgroupcoherent");
-        if (qualifier.shadercallcoherent)
+          if (qualifier.shadercallcoherent)
             appendStr(" shadercallcoherent");
-        if (qualifier.nonprivate)
+          if (qualifier.nonprivate)
             appendStr(" nonprivate");
-        if (qualifier.volatil)
+          if (qualifier.volatil)
             appendStr(" volatile");
-        if (qualifier.restrict)
+          if (qualifier.restrict)
             appendStr(" restrict");
-        if (qualifier.readonly)
+          if (qualifier.readonly)
             appendStr(" readonly");
-        if (qualifier.writeonly)
+          if (qualifier.writeonly)
             appendStr(" writeonly");
-        if (qualifier.specConstant)
+          if (qualifier.specConstant)
             appendStr(" specialization-constant");
-        if (qualifier.nonUniform)
+          if (qualifier.nonUniform)
             appendStr(" nonuniform");
-        if (qualifier.isNullInit())
+          if (qualifier.isNullInit())
             appendStr(" null-init");
-        if (qualifier.isSpirvByReference())
+          if (qualifier.isSpirvByReference())
             appendStr(" spirv_by_reference");
-        if (qualifier.isSpirvLiteral())
+          if (qualifier.isSpirvLiteral())
             appendStr(" spirv_literal");
-        appendStr(" ");
-        appendStr(getStorageQualifierString());
-        if (isArray()) {
-            for(int i = 0; i < (int)arraySizes->getNumDims(); ++i) {
+          appendStr(" ");
+          appendStr(getStorageQualifierString());
+        }
+        if (getType) {
+          if (syntactic) {
+            if (getPrecision && qualifier.precision != EpqNone) {
+              appendStr(" ");
+              appendStr(getPrecisionQualifierString());
+            }
+            if (isVector() || isMatrix()) {
+              appendStr(" ");
+              switch (basicType) {
+              case EbtDouble:
+                appendStr("d");
+                break;
+              case EbtInt:
+                appendStr("i");
+                break;
+              case EbtUint:
+                appendStr("u");
+                break;
+              case EbtBool:
+                appendStr("b");
+                break;
+              case EbtFloat:
+              default:
+                break;
+              }
+              if (isVector()) {
+                appendStr("vec");
+                appendInt(vectorSize);
+              } else {
+                appendStr("mat");
+                appendInt(matrixCols);
+                appendStr("x");
+                appendInt(matrixRows);
+              }
+            } else if (isStruct() && structure) {
+                appendStr(" ");
+                appendStr(structName.c_str());
+                appendStr("{");
+                bool hasHiddenMember = true;
+                for (size_t i = 0; i < structure->size(); ++i) {
+                  if (!(*structure)[i].type->hiddenMember()) {
+                    if (!hasHiddenMember)
+                      appendStr(", ");
+                    typeString.append((*structure)[i].type->getCompleteString(syntactic, getQualifiers, getPrecision, getType, (*structure)[i].type->getFieldName()));
+                    hasHiddenMember = false;
+                  }
+                }
+                appendStr("}");
+            } else {
+                appendStr(" ");
+                switch (basicType) {
+                case EbtDouble:
+                  appendStr("double");
+                  break;
+                case EbtInt:
+                  appendStr("int");
+                  break;
+                case EbtUint:
+                  appendStr("uint");
+                  break;
+                case EbtBool:
+                  appendStr("bool");
+                  break;
+                case EbtFloat:
+                  appendStr("float");
+                  break;
+                default:
+                  appendStr("unexpected");
+                  break;
+                }
+            }
+            if (name.length() > 0) {
+              appendStr(" ");
+              appendStr(name.c_str());
+            }
+            if (isArray()) {
+              for (int i = 0; i < (int)arraySizes->getNumDims(); ++i) {
                 int size = arraySizes->getDimSize(i);
                 if (size == UnsizedArraySize && i == 0 && arraySizes->isVariablyIndexed())
-                    appendStr(" runtime-sized array of");
+                  appendStr("[]");
                 else {
-                    if (size == UnsizedArraySize) {
-                        appendStr(" unsized");
-                        if (i == 0) {
-                            appendStr(" ");
-                            appendInt(arraySizes->getImplicitSize());
-                        }
-                    } else {
-                        appendStr(" ");
-                        appendInt(arraySizes->getDimSize(i));
-                    }
-                    appendStr("-element array of");
+                  if (size == UnsizedArraySize) {
+                    appendStr("[");
+                    if (i == 0)
+                      appendInt(arraySizes->getImplicitSize());
+                    appendStr("]");
+                  }
+                  else {
+                    appendStr("[");
+                    appendInt(arraySizes->getDimSize(i));
+                    appendStr("]");
+                  }
                 }
+              }
             }
-        }
-        if (isParameterized()) {
-            appendStr("<");
-            for(int i = 0; i < (int)typeParameters->getNumDims(); ++i) {
+          }
+          else {
+            if (isArray()) {
+              for (int i = 0; i < (int)arraySizes->getNumDims(); ++i) {
+                int size = arraySizes->getDimSize(i);
+                if (size == UnsizedArraySize && i == 0 && arraySizes->isVariablyIndexed())
+                  appendStr(" runtime-sized array of");
+                else {
+                  if (size == UnsizedArraySize) {
+                    appendStr(" unsized");
+                    if (i == 0) {
+                      appendStr(" ");
+                      appendInt(arraySizes->getImplicitSize());
+                    }
+                  }
+                  else {
+                    appendStr(" ");
+                    appendInt(arraySizes->getDimSize(i));
+                  }
+                  appendStr("-element array of");
+                }
+              }
+            }
+            if (isParameterized()) {
+              appendStr("<");
+              for (int i = 0; i < (int)typeParameters->getNumDims(); ++i) {
                 appendInt(typeParameters->getDimSize(i));
                 if (i != (int)typeParameters->getNumDims() - 1)
+                  appendStr(", ");
+              }
+              appendStr(">");
+            }
+            if (getPrecision && qualifier.precision != EpqNone) {
+              appendStr(" ");
+              appendStr(getPrecisionQualifierString());
+            }
+            if (isMatrix()) {
+              appendStr(" ");
+              appendInt(matrixCols);
+              appendStr("X");
+              appendInt(matrixRows);
+              appendStr(" matrix of");
+            }
+            else if (isVector()) {
+              appendStr(" ");
+              appendInt(vectorSize);
+              appendStr("-component vector of");
+            }
+
+            appendStr(" ");
+            typeString.append(getBasicTypeString());
+
+            if (qualifier.builtIn != EbvNone) {
+              appendStr(" ");
+              appendStr(getBuiltInVariableString());
+            }
+
+            // Add struct/block members
+            if (isStruct() && structure) {
+              appendStr("{");
+              bool hasHiddenMember = true;
+              for (size_t i = 0; i < structure->size(); ++i) {
+                if (!(*structure)[i].type->hiddenMember()) {
+                  if (!hasHiddenMember)
                     appendStr(", ");
-            }
-            appendStr(">");
-        }
-        if (qualifier.precision != EpqNone) {
-            appendStr(" ");
-            appendStr(getPrecisionQualifierString());
-        }
-        if (isMatrix()) {
-            appendStr(" ");
-            appendInt(matrixCols);
-            appendStr("X");
-            appendInt(matrixRows);
-            appendStr(" matrix of");
-        } else if (isVector()) {
-            appendStr(" ");
-            appendInt(vectorSize);
-            appendStr("-component vector of");
-        }
-
-        appendStr(" ");
-        typeString.append(getBasicTypeString());
-
-        if (qualifier.builtIn != EbvNone) {
-            appendStr(" ");
-            appendStr(getBuiltInVariableString());
-        }
-
-        // Add struct/block members
-        if (isStruct() && structure) {
-            appendStr("{");
-            bool hasHiddenMember = true;
-            for (size_t i = 0; i < structure->size(); ++i) {
-                if (! (*structure)[i].type->hiddenMember()) {
-                    if (!hasHiddenMember) 
-                        appendStr(", ");
-                    typeString.append((*structure)[i].type->getCompleteString());
-                    typeString.append(" ");
-                    typeString.append((*structure)[i].type->getFieldName());
-                    hasHiddenMember = false;
+                  typeString.append((*structure)[i].type->getCompleteString());
+                  typeString.append(" ");
+                  typeString.append((*structure)[i].type->getFieldName());
+                  hasHiddenMember = false;
                 }
+              }
+              appendStr("}");
             }
-            appendStr("}");
+          }
         }
 
         return typeString;
@@ -2396,7 +2544,7 @@
     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; }
-    
+
     int computeNumComponents() const
     {
         int components = 0;
@@ -2442,13 +2590,27 @@
     //  type definitions, and member names to be considered the same type.
     //  This rule applies recursively for nested or embedded types."
     //
-    bool sameStructType(const TType& right) const
+    // If type mismatch in structure, return member indices through lpidx and rpidx.
+    // If matching members for either block are exhausted, return -1 for exhausted
+    // block and the index of the unmatched member. Otherwise return {-1,-1}.
+    //
+    bool sameStructType(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const
     {
+        // Initialize error to general type mismatch.
+        if (lpidx != nullptr) {
+            *lpidx = -1;
+            *rpidx = -1;
+        }
+
         // Most commonly, they are both nullptr, or the same pointer to the same actual structure
+        // TODO: Why return true when neither types are structures?
         if ((!isStruct() && !right.isStruct()) ||
             (isStruct() && right.isStruct() && structure == right.structure))
             return true;
 
+        if (!isStruct() || !right.isStruct())
+            return false;
+
         // Structure names have to match
         if (*typeName != *right.typeName)
             return false;
@@ -2458,12 +2620,17 @@
         bool isGLPerVertex = *typeName == "gl_PerVertex";
 
         // Both being nullptr was caught above, now they both have to be structures of the same number of elements
-        if (!isStruct() || !right.isStruct() ||
-            (structure->size() != right.structure->size() && !isGLPerVertex))
+        if (lpidx == nullptr &&
+            (structure->size() != right.structure->size() && !isGLPerVertex)) {
             return false;
+        }
 
         // Compare the names and types of all the members, which have to match
         for (size_t li = 0, ri = 0; li < structure->size() || ri < right.structure->size(); ++li, ++ri) {
+            if (lpidx != nullptr) {
+                *lpidx = static_cast<int>(li);
+                *rpidx = static_cast<int>(ri);
+            }
             if (li < structure->size() && ri < right.structure->size()) {
                 if ((*structure)[li].type->getFieldName() == (*right.structure)[ri].type->getFieldName()) {
                     if (*(*structure)[li].type != *(*right.structure)[ri].type)
@@ -2493,11 +2660,19 @@
                 }
             // If we get here, then there should only be inconsistently declared members left
             } else if (li < structure->size()) {
-                if (!(*structure)[li].type->hiddenMember() && !isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName()))
+                if (!(*structure)[li].type->hiddenMember() && !isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) {
+                    if (lpidx != nullptr) {
+                        *rpidx = -1;
+                    }
                     return false;
+                }
             } else {
-                if (!(*right.structure)[ri].type->hiddenMember() && !isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName()))
+                if (!(*right.structure)[ri].type->hiddenMember() && !isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) {
+                    if (lpidx != nullptr) {
+                        *lpidx = -1;
+                    }
                     return false;
+                }
             }
         }
 
@@ -2521,10 +2696,15 @@
         return *referentType == *right.referentType;
     }
 
-   // See if two types match, in all aspects except arrayness
-    bool sameElementType(const TType& right) const
+    // See if two types match, in all aspects except arrayness
+    // If mismatch in structure members, return member indices in lpidx and rpidx.
+    bool sameElementType(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const
     {
-        return basicType == right.basicType && sameElementShape(right);
+        if (lpidx != nullptr) {
+            *lpidx = -1;
+            *rpidx = -1;
+        }
+        return basicType == right.basicType && sameElementShape(right, lpidx, rpidx);
     }
 
     // See if two type's arrayness match
@@ -2558,15 +2738,20 @@
 #endif
 
     // See if two type's elements match in all ways except basic type
-    bool sameElementShape(const TType& right) const
+    // If mismatch in structure members, return member indices in lpidx and rpidx.
+    bool sameElementShape(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const
     {
-        return    sampler == right.sampler    &&
+        if (lpidx != nullptr) {
+            *lpidx = -1;
+            *rpidx = -1;
+        }
+        return ((basicType != EbtSampler && right.basicType != EbtSampler) || sampler == right.sampler) &&
                vectorSize == right.vectorSize &&
                matrixCols == right.matrixCols &&
                matrixRows == right.matrixRows &&
                   vector1 == right.vector1    &&
               isCoopMat() == right.isCoopMat() &&
-               sameStructType(right)          &&
+               sameStructType(right, lpidx, rpidx) &&
                sameReferenceType(right);
     }
 
diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h
index 4b32e2b..f540f26 100644
--- a/glslang/Include/glslang_c_interface.h
+++ b/glslang/Include/glslang_c_interface.h
@@ -148,6 +148,15 @@
     int max_task_work_group_size_y_nv;
     int max_task_work_group_size_z_nv;
     int max_mesh_view_count_nv;
+    int max_mesh_output_vertices_ext;
+    int max_mesh_output_primitives_ext;
+    int max_mesh_work_group_size_x_ext;
+    int max_mesh_work_group_size_y_ext;
+    int max_mesh_work_group_size_z_ext;
+    int max_task_work_group_size_x_ext;
+    int max_task_work_group_size_y_ext;
+    int max_task_work_group_size_z_ext;
+    int max_mesh_view_count_ext;
     int maxDualSourceDrawBuffersEXT;
 
     glslang_limits_t limits;
@@ -199,6 +208,18 @@
     glsl_free_include_result_func free_include_result;
 } glsl_include_callbacks_t;
 
+/* SpvOptions counterpart */
+typedef struct glslang_spv_options_s {
+    bool generate_debug_info;
+    bool strip_debug_info;
+    bool disable_optimizer;
+    bool optimize_size;
+    bool disassemble;
+    bool validate;
+    bool emit_nonsemantic_shader_debug_info;
+    bool emit_nonsemantic_shader_debug_source;
+} glslang_spv_options_t;
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -224,6 +245,11 @@
 
 GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
 GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader);
+GLSLANG_EXPORT void glslang_shader_set_preamble(glslang_shader_t* shader, const char* s);
+GLSLANG_EXPORT void glslang_shader_shift_binding(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base);
+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 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);
@@ -234,7 +260,11 @@
 GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program);
 GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader);
 GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
+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 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);
 GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);
 GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program);
diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h
index f100a9a..9bc2114 100644
--- a/glslang/Include/glslang_c_shader_types.h
+++ b/glslang/Include/glslang_c_shader_types.h
@@ -43,14 +43,22 @@
     GLSLANG_STAGE_GEOMETRY,
     GLSLANG_STAGE_FRAGMENT,
     GLSLANG_STAGE_COMPUTE,
-    GLSLANG_STAGE_RAYGEN_NV,
-    GLSLANG_STAGE_INTERSECT_NV,
-    GLSLANG_STAGE_ANYHIT_NV,
-    GLSLANG_STAGE_CLOSESTHIT_NV,
-    GLSLANG_STAGE_MISS_NV,
-    GLSLANG_STAGE_CALLABLE_NV,
-    GLSLANG_STAGE_TASK_NV,
-    GLSLANG_STAGE_MESH_NV,
+    GLSLANG_STAGE_RAYGEN,
+    GLSLANG_STAGE_RAYGEN_NV = GLSLANG_STAGE_RAYGEN,
+    GLSLANG_STAGE_INTERSECT,
+    GLSLANG_STAGE_INTERSECT_NV = GLSLANG_STAGE_INTERSECT,
+    GLSLANG_STAGE_ANYHIT,
+    GLSLANG_STAGE_ANYHIT_NV = GLSLANG_STAGE_ANYHIT,
+    GLSLANG_STAGE_CLOSESTHIT,
+    GLSLANG_STAGE_CLOSESTHIT_NV = GLSLANG_STAGE_CLOSESTHIT,
+    GLSLANG_STAGE_MISS,
+    GLSLANG_STAGE_MISS_NV = GLSLANG_STAGE_MISS,
+    GLSLANG_STAGE_CALLABLE,
+    GLSLANG_STAGE_CALLABLE_NV = GLSLANG_STAGE_CALLABLE,
+    GLSLANG_STAGE_TASK,
+    GLSLANG_STAGE_TASK_NV = GLSLANG_STAGE_TASK,
+    GLSLANG_STAGE_MESH,
+    GLSLANG_STAGE_MESH_NV = GLSLANG_STAGE_MESH,
     LAST_ELEMENT_MARKER(GLSLANG_STAGE_COUNT),
 } glslang_stage_t; // would be better as stage, but this is ancient now
 
@@ -62,14 +70,22 @@
     GLSLANG_STAGE_GEOMETRY_MASK = (1 << GLSLANG_STAGE_GEOMETRY),
     GLSLANG_STAGE_FRAGMENT_MASK = (1 << GLSLANG_STAGE_FRAGMENT),
     GLSLANG_STAGE_COMPUTE_MASK = (1 << GLSLANG_STAGE_COMPUTE),
-    GLSLANG_STAGE_RAYGEN_NV_MASK = (1 << GLSLANG_STAGE_RAYGEN_NV),
-    GLSLANG_STAGE_INTERSECT_NV_MASK = (1 << GLSLANG_STAGE_INTERSECT_NV),
-    GLSLANG_STAGE_ANYHIT_NV_MASK = (1 << GLSLANG_STAGE_ANYHIT_NV),
-    GLSLANG_STAGE_CLOSESTHIT_NV_MASK = (1 << GLSLANG_STAGE_CLOSESTHIT_NV),
-    GLSLANG_STAGE_MISS_NV_MASK = (1 << GLSLANG_STAGE_MISS_NV),
-    GLSLANG_STAGE_CALLABLE_NV_MASK = (1 << GLSLANG_STAGE_CALLABLE_NV),
-    GLSLANG_STAGE_TASK_NV_MASK = (1 << GLSLANG_STAGE_TASK_NV),
-    GLSLANG_STAGE_MESH_NV_MASK = (1 << GLSLANG_STAGE_MESH_NV),
+    GLSLANG_STAGE_RAYGEN_MASK = (1 << GLSLANG_STAGE_RAYGEN),
+    GLSLANG_STAGE_RAYGEN_NV_MASK = GLSLANG_STAGE_RAYGEN_MASK,
+    GLSLANG_STAGE_INTERSECT_MASK = (1 << GLSLANG_STAGE_INTERSECT),
+    GLSLANG_STAGE_INTERSECT_NV_MASK = GLSLANG_STAGE_INTERSECT_MASK,
+    GLSLANG_STAGE_ANYHIT_MASK = (1 << GLSLANG_STAGE_ANYHIT),
+    GLSLANG_STAGE_ANYHIT_NV_MASK = GLSLANG_STAGE_ANYHIT_MASK,
+    GLSLANG_STAGE_CLOSESTHIT_MASK = (1 << GLSLANG_STAGE_CLOSESTHIT),
+    GLSLANG_STAGE_CLOSESTHIT_NV_MASK = GLSLANG_STAGE_CLOSESTHIT_MASK,
+    GLSLANG_STAGE_MISS_MASK = (1 << GLSLANG_STAGE_MISS),
+    GLSLANG_STAGE_MISS_NV_MASK = GLSLANG_STAGE_MISS_MASK,
+    GLSLANG_STAGE_CALLABLE_MASK = (1 << GLSLANG_STAGE_CALLABLE),
+    GLSLANG_STAGE_CALLABLE_NV_MASK = GLSLANG_STAGE_CALLABLE_MASK,
+    GLSLANG_STAGE_TASK_MASK = (1 << GLSLANG_STAGE_TASK),
+    GLSLANG_STAGE_TASK_NV_MASK = GLSLANG_STAGE_TASK_MASK,
+    GLSLANG_STAGE_MESH_MASK = (1 << GLSLANG_STAGE_MESH),
+    GLSLANG_STAGE_MESH_NV_MASK = GLSLANG_STAGE_MESH_MASK,
     LAST_ELEMENT_MARKER(GLSLANG_STAGE_MASK_COUNT),
 } glslang_stage_mask_t;
 
@@ -101,8 +117,9 @@
     GLSLANG_TARGET_VULKAN_1_0 = (1 << 22),
     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_OPENGL_450 = 450,
-    LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT = 4),
+    LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT = 5),
 } glslang_target_client_version_t;
 
 /* SH_TARGET_LanguageVersion counterpart */
@@ -113,13 +130,16 @@
     GLSLANG_TARGET_SPV_1_3 = (1 << 16) | (3 << 8),
     GLSLANG_TARGET_SPV_1_4 = (1 << 16) | (4 << 8),
     GLSLANG_TARGET_SPV_1_5 = (1 << 16) | (5 << 8),
-    LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT = 6),
+    GLSLANG_TARGET_SPV_1_6 = (1 << 16) | (6 << 8),
+    LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT = 7),
 } glslang_target_language_version_t;
 
 /* EShExecutable counterpart */
 typedef enum { GLSLANG_EX_VERTEX_FRAGMENT, GLSLANG_EX_FRAGMENT } glslang_executable_t;
 
-/* EShOptimizationLevel counterpart  */
+// EShOptimizationLevel counterpart
+// This enum is not used in the current C interface, but could be added at a later date.
+// GLSLANG_OPT_NONE is the current default.
 typedef enum {
     GLSLANG_OPT_NO_GENERATION,
     GLSLANG_OPT_NONE,
@@ -153,6 +173,7 @@
     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),
     LAST_ELEMENT_MARKER(GLSLANG_MSG_COUNT),
 } glslang_messages_t;
 
@@ -181,6 +202,26 @@
     LAST_ELEMENT_MARKER(GLSLANG_PROFILE_COUNT),
 } glslang_profile_t;
 
+/* Shader options */
+typedef enum {
+    GLSLANG_SHADER_DEFAULT_BIT = 0,
+    GLSLANG_SHADER_AUTO_MAP_BINDINGS = (1 << 0),
+    GLSLANG_SHADER_AUTO_MAP_LOCATIONS = (1 << 1),
+    GLSLANG_SHADER_VULKAN_RULES_RELAXED = (1 << 2),
+    LAST_ELEMENT_MARKER(GLSLANG_SHADER_COUNT),
+} glslang_shader_options_t;
+
+/* TResourceType counterpart */
+typedef enum {
+    GLSLANG_RESOURCE_TYPE_SAMPLER,
+    GLSLANG_RESOURCE_TYPE_TEXTURE,
+    GLSLANG_RESOURCE_TYPE_IMAGE,
+    GLSLANG_RESOURCE_TYPE_UBO,
+    GLSLANG_RESOURCE_TYPE_SSBO,
+    GLSLANG_RESOURCE_TYPE_UAV,
+    LAST_ELEMENT_MARKER(GLSLANG_RESOURCE_TYPE_COUNT),
+} glslang_resource_type_t;
+
 #undef LAST_ELEMENT_MARKER
 
 #endif
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 595bd62..a024002 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -67,6 +67,7 @@
 enum TOperator {
     EOpNull,            // if in a node, should only mean a node is still being built
     EOpSequence,        // denotes a list of statements, or parameters, etc.
+    EOpScope,           // Used by debugging to denote a scoped list of statements
     EOpLinkerObjects,   // for aggregate node of objects the linker may need, if not reference by the rest of the AST
     EOpFunctionCall,
     EOpFunction,        // For function definition
@@ -91,6 +92,8 @@
 
     EOpCopyObject,
 
+    EOpDeclare,        // Used by debugging to force declaration of variable in correct scope
+
     // (u)int* -> bool
     EOpConvInt8ToBool,
     EOpConvUint8ToBool,
@@ -934,6 +937,8 @@
     EOpExecuteCallableNV,
     EOpExecuteCallableKHR,
     EOpWritePackedPrimitiveIndices4x8NV,
+    EOpEmitMeshTasksEXT,
+    EOpSetMeshOutputsEXT,
 
     //
     // GL_EXT_ray_query operations
@@ -1155,7 +1160,7 @@
     virtual bool isIntegerDomain() const { return type.isIntegerDomain(); }
     bool isAtomic() const { return type.isAtomic(); }
     bool isReference() const { return type.isReference(); }
-    TString getCompleteString() const { return type.getCompleteString(); }
+    TString getCompleteString(bool enhanced = false) const { return type.getCompleteString(enhanced); }
 
 protected:
     TIntermTyped& operator=(const TIntermTyped&);
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 7f5d4c4..5fc61db 100644
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -46,35 +46,6 @@
 
 using namespace glslang;
 
-typedef union {
-    double d;
-    int i[2];
-} DoubleIntUnion;
-
-// Some helper functions
-
-bool isNan(double x)
-{
-    DoubleIntUnion u;
-    // tough to find a platform independent library function, do it directly
-    u.d = x;
-    int bitPatternL = u.i[0];
-    int bitPatternH = u.i[1];
-    return (bitPatternH & 0x7ff80000) == 0x7ff80000 &&
-           ((bitPatternH & 0xFFFFF) != 0 || bitPatternL != 0);
-}
-
-bool isInf(double x)
-{
-    DoubleIntUnion u;
-    // tough to find a platform independent library function, do it directly
-    u.d = x;
-    int bitPatternL = u.i[0];
-    int bitPatternH = u.i[1];
-    return (bitPatternH & 0x7ff00000) == 0x7ff00000 &&
-           (bitPatternH & 0xFFFFF) == 0 && bitPatternL == 0;
-}
-
 const double pi = 3.1415926535897932384626433832795;
 
 } // end anonymous namespace
@@ -663,12 +634,12 @@
 
         case EOpIsNan:
         {
-            newConstArray[i].setBConst(isNan(unionArray[i].getDConst()));
+            newConstArray[i].setBConst(IsNan(unionArray[i].getDConst()));
             break;
         }
         case EOpIsInf:
         {
-            newConstArray[i].setBConst(isInf(unionArray[i].getDConst()));
+            newConstArray[i].setBConst(IsInfinity(unionArray[i].getDConst()));
             break;
         }
 
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index b5f48fb..0cbb9e7 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -316,6 +316,7 @@
 
     { EOpTextureQuerySize,      "textureSize",           nullptr },
     { EOpTextureQueryLod,       "textureQueryLod",       nullptr },
+    { EOpTextureQueryLod,       "textureQueryLOD",       nullptr }, // extension GL_ARB_texture_query_lod
     { EOpTextureQueryLevels,    "textureQueryLevels",    nullptr },
     { EOpTextureQuerySamples,   "textureSamples",        nullptr },
     { EOpTexture,               "texture",               nullptr },
@@ -2267,11 +2268,11 @@
 
             "\n"
             );
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "void subgroupMemoryBarrierShared();"
             "\n"
             );
-        stageBuiltins[EShLangTaskNV].append(
+        stageBuiltins[EShLangTask].append(
             "void subgroupMemoryBarrierShared();"
             "\n"
             );
@@ -4269,7 +4270,7 @@
         //
         //============================================================================
 
-        if (profile != EEsProfile && version >= 400) {
+        if (profile != EEsProfile && (version >= 400 || version == 150)) {
             stageBuiltins[EShLangGeometry].append(
                 "void EmitStreamVertex(int);"
                 "void EndStreamPrimitive(int);"
@@ -4297,10 +4298,10 @@
             "void barrier();"
             );
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "void barrier();"
             );
-        stageBuiltins[EShLangTaskNV].append(
+        stageBuiltins[EShLangTask].append(
             "void barrier();"
             );
     }
@@ -4325,11 +4326,11 @@
         commonBuiltins.append("void memoryBarrierImage();");
     }
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "void memoryBarrierShared();"
             "void groupMemoryBarrier();"
         );
-        stageBuiltins[EShLangTaskNV].append(
+        stageBuiltins[EShLangTask].append(
             "void memoryBarrierShared();"
             "void groupMemoryBarrier();"
         );
@@ -4654,10 +4655,21 @@
 
     // Builtins for GL_NV_mesh_shader
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "void writePackedPrimitiveIndices4x8NV(uint, uint);"
             "\n");
     }
+    // Builtins for GL_EXT_mesh_shader
+    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
+        // Builtins for GL_EXT_mesh_shader
+        stageBuiltins[EShLangTask].append(
+            "void EmitMeshTasksEXT(uint, uint, uint);"
+            "\n");
+
+        stageBuiltins[EShLangMesh].append(
+            "void SetMeshOutputsEXT(uint, uint);"
+            "\n");
+    }
 #endif // !GLSLANG_ANGLE
 #endif // !GLSLANG_WEB
 
@@ -4854,7 +4866,7 @@
 
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         // per-vertex attributes
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "out gl_MeshPerVertexNV {"
                 "vec4 gl_Position;"
                 "float gl_PointSize;"
@@ -4867,7 +4879,7 @@
         );
 
         // per-primitive attributes
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "perprimitiveNV out gl_MeshPerPrimitiveNV {"
                 "int gl_PrimitiveID;"
                 "int gl_Layer;"
@@ -4878,7 +4890,7 @@
             "} gl_MeshPrimitivesNV[];"
         );
 
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "out uint gl_PrimitiveCountNV;"
             "out uint gl_PrimitiveIndicesNV[];"
 
@@ -4892,10 +4904,38 @@
 
             "in highp uvec3 gl_GlobalInvocationID;"
             "in highp uint gl_LocalInvocationIndex;"
-
             "\n");
 
-        stageBuiltins[EShLangTaskNV].append(
+        // GL_EXT_mesh_shader
+        stageBuiltins[EShLangMesh].append(
+            "out uint gl_PrimitivePointIndicesEXT[];"
+            "out uvec2 gl_PrimitiveLineIndicesEXT[];"
+            "out uvec3 gl_PrimitiveTriangleIndicesEXT[];"
+            "in    highp uvec3 gl_NumWorkGroups;"
+            "\n");
+
+        // per-vertex attributes
+        stageBuiltins[EShLangMesh].append(
+            "out gl_MeshPerVertexEXT {"
+                "vec4 gl_Position;"
+                "float gl_PointSize;"
+                "float gl_ClipDistance[];"
+                "float gl_CullDistance[];"
+            "} gl_MeshVerticesEXT[];"
+        );
+
+        // per-primitive attributes
+        stageBuiltins[EShLangMesh].append(
+            "perprimitiveEXT out gl_MeshPerPrimitiveEXT {"
+                "int gl_PrimitiveID;"
+                "int gl_Layer;"
+                "int gl_ViewportIndex;"
+                "bool gl_CullPrimitiveEXT;"
+                "int  gl_PrimitiveShadingRateEXT;"
+            "} gl_MeshPrimitivesEXT[];"
+        );
+
+        stageBuiltins[EShLangTask].append(
             "out uint gl_TaskCountNV;"
 
             "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
@@ -4908,27 +4948,28 @@
 
             "in uint gl_MeshViewCountNV;"
             "in uint gl_MeshViewIndicesNV[4];"
-
+            "in    highp uvec3 gl_NumWorkGroups;"
             "\n");
     }
 
     if (profile != EEsProfile && version >= 450) {
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
             "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
+            "in int gl_ViewIndex;"             // GL_EXT_multiview
             "\n");
 
-        stageBuiltins[EShLangTaskNV].append(
+        stageBuiltins[EShLangTask].append(
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
             "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
             "\n");
 
         if (version >= 460) {
-            stageBuiltins[EShLangMeshNV].append(
+            stageBuiltins[EShLangMesh].append(
                 "in int gl_DrawID;"
                 "\n");
 
-            stageBuiltins[EShLangTaskNV].append(
+            stageBuiltins[EShLangTask].append(
                 "in int gl_DrawID;"
                 "\n");
         }
@@ -5570,6 +5611,8 @@
                 "flat in int   gl_InvocationsPerPixelNV;"
                 "in vec3 gl_BaryCoordNV;"                   // GL_NV_fragment_shader_barycentric
                 "in vec3 gl_BaryCoordNoPerspNV;"
+                "in vec3 gl_BaryCoordEXT;"                  // GL_EXT_fragment_shader_barycentric
+                "in vec3 gl_BaryCoordNoPerspEXT;"
                 );
 
         if (version >= 450)
@@ -5634,7 +5677,9 @@
             stageBuiltins[EShLangFragment].append(
                 "in vec3 gl_BaryCoordNV;"
                 "in vec3 gl_BaryCoordNoPerspNV;"
-                );
+                "in vec3 gl_BaryCoordEXT;"
+                "in vec3 gl_BaryCoordNoPerspEXT;"
+            );
         if (version >= 310)
             stageBuiltins[EShLangFragment].append(
                 "flat in highp int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate
@@ -5699,8 +5744,8 @@
         stageBuiltins[EShLangGeometry]      .append(ballotDecls);
         stageBuiltins[EShLangCompute]       .append(ballotDecls);
         stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
-        stageBuiltins[EShLangMeshNV]        .append(ballotDecls);
-        stageBuiltins[EShLangTaskNV]        .append(ballotDecls);
+        stageBuiltins[EShLangMesh]        .append(ballotDecls);
+        stageBuiltins[EShLangTask]        .append(ballotDecls);
         stageBuiltins[EShLangRayGen]        .append(rtBallotDecls);
         stageBuiltins[EShLangIntersect]     .append(rtBallotDecls);
         // No volatile qualifier on these builtins in any-hit
@@ -5768,10 +5813,10 @@
         stageBuiltins[EShLangCompute]       .append(subgroupDecls);
         stageBuiltins[EShLangCompute]       .append(computeSubgroupDecls);
         stageBuiltins[EShLangFragment]      .append(fragmentSubgroupDecls);
-        stageBuiltins[EShLangMeshNV]        .append(subgroupDecls);
-        stageBuiltins[EShLangMeshNV]        .append(computeSubgroupDecls);
-        stageBuiltins[EShLangTaskNV]        .append(subgroupDecls);
-        stageBuiltins[EShLangTaskNV]        .append(computeSubgroupDecls);
+        stageBuiltins[EShLangMesh]        .append(subgroupDecls);
+        stageBuiltins[EShLangMesh]        .append(computeSubgroupDecls);
+        stageBuiltins[EShLangTask]        .append(subgroupDecls);
+        stageBuiltins[EShLangTask]        .append(computeSubgroupDecls);
         stageBuiltins[EShLangRayGen]        .append(rtSubgroupDecls);
         stageBuiltins[EShLangIntersect]     .append(rtSubgroupDecls);
         // No volatile qualifier on these builtins in any-hit
@@ -5805,6 +5850,7 @@
             "const uint gl_RayFlagsCullNoOpaqueEXT = 128U;"
             "const uint gl_RayFlagsSkipTrianglesEXT = 256U;"
             "const uint gl_RayFlagsSkipAABBEXT = 512U;"
+            "const uint gl_RayFlagsForceOpacityMicromap2StateEXT = 1024U;"
             "const uint gl_HitKindFrontFacingTriangleEXT = 254U;"
             "const uint gl_HitKindBackFacingTriangleEXT = 255U;"
             "\n";
@@ -5856,6 +5902,7 @@
             "in    uint   gl_IncomingRayFlagsNV;"
             "in    uint   gl_IncomingRayFlagsEXT;"
             "in    float  gl_CurrentRayTimeNV;"
+            "in    uint   gl_CullMaskEXT;"
             "\n";
         const char *hitDecls =
             "in    uvec3  gl_LaunchIDNV;"
@@ -5892,6 +5939,7 @@
             "in    uint   gl_IncomingRayFlagsNV;"
             "in    uint   gl_IncomingRayFlagsEXT;"
             "in    float  gl_CurrentRayTimeNV;"
+            "in    uint   gl_CullMaskEXT;"
             "\n";
         const char *missDecls =
             "in    uvec3  gl_LaunchIDNV;"
@@ -5911,6 +5959,7 @@
             "in    uint   gl_IncomingRayFlagsNV;"
             "in    uint   gl_IncomingRayFlagsEXT;"
             "in    float  gl_CurrentRayTimeNV;"
+            "in    uint   gl_CullMaskEXT;"
             "\n";
 
         const char *callableDecls =
@@ -6247,38 +6296,44 @@
     //
     // textureQueryLod(), fragment stage only
     // Also enabled with extension GL_ARB_texture_query_lod
+    // Extension GL_ARB_texture_query_lod says that textureQueryLOD() also exist at extension.
 
     if (profile != EEsProfile && version >= 150 && sampler.isCombined() && sampler.dim != EsdRect &&
         ! sampler.isMultiSample() && ! sampler.isBuffer()) {
-        for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
-            if (f16TexAddr && sampler.type != EbtFloat16)
-                continue;
-            stageBuiltins[EShLangFragment].append("vec2 textureQueryLod(");
-            stageBuiltins[EShLangFragment].append(typeName);
-            if (dimMap[sampler.dim] == 1)
-                if (f16TexAddr)
-                    stageBuiltins[EShLangFragment].append(", float16_t");
-                else
-                    stageBuiltins[EShLangFragment].append(", float");
-            else {
-                if (f16TexAddr)
-                    stageBuiltins[EShLangFragment].append(", f16vec");
-                else
-                    stageBuiltins[EShLangFragment].append(", vec");
-                stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
-            }
-            stageBuiltins[EShLangFragment].append(");\n");
-        }
 
-        stageBuiltins[EShLangCompute].append("vec2 textureQueryLod(");
-        stageBuiltins[EShLangCompute].append(typeName);
-        if (dimMap[sampler.dim] == 1)
-            stageBuiltins[EShLangCompute].append(", float");
-        else {
-            stageBuiltins[EShLangCompute].append(", vec");
-            stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]);
+        const TString funcName[2] = {"vec2 textureQueryLod(", "vec2 textureQueryLOD("};
+
+        for (int i = 0; i < 2; ++i){
+            for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
+                if (f16TexAddr && sampler.type != EbtFloat16)
+                    continue;
+                stageBuiltins[EShLangFragment].append(funcName[i]);
+                stageBuiltins[EShLangFragment].append(typeName);
+                if (dimMap[sampler.dim] == 1)
+                    if (f16TexAddr)
+                        stageBuiltins[EShLangFragment].append(", float16_t");
+                    else
+                        stageBuiltins[EShLangFragment].append(", float");
+                else {
+                    if (f16TexAddr)
+                        stageBuiltins[EShLangFragment].append(", f16vec");
+                    else
+                        stageBuiltins[EShLangFragment].append(", vec");
+                    stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
+                }
+                stageBuiltins[EShLangFragment].append(");\n");
+            }
+
+            stageBuiltins[EShLangCompute].append(funcName[i]);
+            stageBuiltins[EShLangCompute].append(typeName);
+            if (dimMap[sampler.dim] == 1)
+                stageBuiltins[EShLangCompute].append(", float");
+            else {
+                stageBuiltins[EShLangCompute].append(", vec");
+                stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]);
+            }
+            stageBuiltins[EShLangCompute].append(");\n");
         }
-        stageBuiltins[EShLangCompute].append(");\n");
     }
 
     //
@@ -7600,6 +7655,23 @@
 }
 
 //
+// Modify the symbol's flat decoration.
+//
+// Safe to call even if name is not present.
+//
+// Originally written to transform gl_SubGroupSizeARB from uniform to fragment input in Vulkan.
+//
+static void ModifyFlatDecoration(const char* name, bool flat, TSymbolTable& symbolTable)
+{
+    TSymbol* symbol = symbolTable.find(name);
+    if (symbol == nullptr)
+        return;
+
+    TQualifier& symQualifier = symbol->getWritableType().getQualifier();
+    symQualifier.flat = flat;
+}
+
+//
 // To tag built-in variables with their TBuiltInVariable enum.  Use this when the
 // normal declaration text already gets the qualifier right, and all that's needed
 // is setting the builtIn field.  This should be the normal way for all new
@@ -7982,9 +8054,12 @@
             BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
             BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 
-            if (spvVersion.vulkan > 0)
+            if (spvVersion.vulkan > 0) {
                 // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
                 SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+                if (language == EShLangFragment)
+                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
+            }
             else
                 BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
         }
@@ -8051,6 +8126,7 @@
         SpecialQualifier("gl_FragDepth",        EvqFragDepth,  EbvFragDepth,        symbolTable);
 #ifndef GLSLANG_WEB
         SpecialQualifier("gl_FragDepthEXT",     EvqFragDepth,  EbvFragDepth,        symbolTable);
+        SpecialQualifier("gl_FragStencilRefARB", EvqFragStencil, EbvFragStencilRef, symbolTable);
         SpecialQualifier("gl_HelperInvocation", EvqVaryingIn,  EbvHelperInvocation, symbolTable);
 
         BuiltInVariable("gl_ClipDistance",    EbvClipDistance,   symbolTable);
@@ -8063,7 +8139,7 @@
         }
 
         if (profile != EEsProfile && version < 400) {
-            symbolTable.setFunctionExtensions("textureQueryLod", 1, &E_GL_ARB_texture_query_lod);
+            symbolTable.setFunctionExtensions("textureQueryLOD", 1, &E_GL_ARB_texture_query_lod);
         }
 
         if (profile != EEsProfile && version >= 460) {
@@ -8092,6 +8168,7 @@
             symbolTable.setFunctionExtensions("rayQueryGetWorldRayDirectionEXT",                                  1, &E_GL_EXT_ray_query);
             symbolTable.setVariableExtensions("gl_RayFlagsSkipAABBEXT",                         1, &E_GL_EXT_ray_flags_primitive_culling);
             symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT",                    1, &E_GL_EXT_ray_flags_primitive_culling);
+            symbolTable.setVariableExtensions("gl_RayFlagsForceOpacityMicromap2StateEXT",                  1, &E_GL_EXT_opacity_micromap);
         }
 
         if ((profile != EEsProfile && version >= 130) ||
@@ -8311,6 +8388,10 @@
             symbolTable.setVariableExtensions("gl_BaryCoordNoPerspNV", 1, &E_GL_NV_fragment_shader_barycentric);
             BuiltInVariable("gl_BaryCoordNV",        EbvBaryCoordNV,        symbolTable);
             BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable);
+            symbolTable.setVariableExtensions("gl_BaryCoordEXT",        1, &E_GL_EXT_fragment_shader_barycentric);
+            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspEXT", 1, &E_GL_EXT_fragment_shader_barycentric);
+            BuiltInVariable("gl_BaryCoordEXT",        EbvBaryCoordEXT,        symbolTable);
+            BuiltInVariable("gl_BaryCoordNoPerspEXT", EbvBaryCoordNoPerspEXT, symbolTable);
         }
 
         if ((profile != EEsProfile && version >= 450) ||
@@ -8346,10 +8427,11 @@
         }
 
         if (profile != EEsProfile && version < 330 ) {
-            symbolTable.setFunctionExtensions("floatBitsToInt", 1, &E_GL_ARB_shader_bit_encoding);
-            symbolTable.setFunctionExtensions("floatBitsToUint", 1, &E_GL_ARB_shader_bit_encoding);
-            symbolTable.setFunctionExtensions("intBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
-            symbolTable.setFunctionExtensions("uintBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
+            const char* bitsConvertExt[2] = {E_GL_ARB_shader_bit_encoding, E_GL_ARB_gpu_shader5};
+            symbolTable.setFunctionExtensions("floatBitsToInt", 2, bitsConvertExt);
+            symbolTable.setFunctionExtensions("floatBitsToUint", 2, bitsConvertExt);
+            symbolTable.setFunctionExtensions("intBitsToFloat", 2, bitsConvertExt);
+            symbolTable.setFunctionExtensions("uintBitsToFloat", 2, bitsConvertExt);
         }
 
         if (profile != EEsProfile && version < 430 ) {
@@ -8410,9 +8492,12 @@
             BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
             BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 
-            if (spvVersion.vulkan > 0)
+            if (spvVersion.vulkan > 0) {
                 // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
                 SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+                if (language == EShLangFragment)
+                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
+            }
             else
                 BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
         }
@@ -8627,9 +8712,12 @@
             BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
             BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 
-            if (spvVersion.vulkan > 0)
+            if (spvVersion.vulkan > 0) {
                 // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
                 SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+                if (language == EShLangFragment)
+                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
+            }
             else
                 BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
         }
@@ -8735,6 +8823,7 @@
             symbolTable.setVariableExtensions("gl_RayTminEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_RayTmaxNV", 1, &E_GL_NV_ray_tracing);
             symbolTable.setVariableExtensions("gl_RayTmaxEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setVariableExtensions("gl_CullMaskEXT", 1, &E_GL_EXT_ray_cull_mask);
             symbolTable.setVariableExtensions("gl_HitTNV", 1, &E_GL_NV_ray_tracing);
             symbolTable.setVariableExtensions("gl_HitTEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_HitKindNV", 1, &E_GL_NV_ray_tracing);
@@ -8784,6 +8873,7 @@
             BuiltInVariable("gl_RayTminEXT",             EbvRayTmin,            symbolTable);
             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);
@@ -8815,9 +8905,12 @@
             BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
             BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 
-            if (spvVersion.vulkan > 0)
+            if (spvVersion.vulkan > 0) {
                 // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
                 SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+                if (language == EShLangFragment)
+                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
+            }
             else
                 BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
 
@@ -8861,7 +8954,7 @@
         }
         break;
 
-    case EShLangMeshNV:
+    case EShLangMesh:
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
             // per-vertex builtins
             symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_Position",     1, &E_GL_NV_mesh_shader);
@@ -8905,12 +8998,19 @@
             symbolTable.setVariableExtensions("gl_PrimitiveIndicesNV",   1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
-
+            if (profile != EEsProfile) {
+                symbolTable.setVariableExtensions("gl_WorkGroupSize",        Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_WorkGroupID",          Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationID",    Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader);
+            } else {
+                symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
+            }
             BuiltInVariable("gl_PrimitiveCountNV",     EbvPrimitiveCountNV,     symbolTable);
             BuiltInVariable("gl_PrimitiveIndicesNV",   EbvPrimitiveIndicesNV,   symbolTable);
             BuiltInVariable("gl_MeshViewCountNV",      EbvMeshViewCountNV,      symbolTable);
@@ -8928,12 +9028,54 @@
             symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",        1, &E_GL_NV_mesh_shader);
 
             // builtin functions
-            symbolTable.setFunctionExtensions("barrier",                      1, &E_GL_NV_mesh_shader);
-            symbolTable.setFunctionExtensions("memoryBarrierShared",          1, &E_GL_NV_mesh_shader);
-            symbolTable.setFunctionExtensions("groupMemoryBarrier",           1, &E_GL_NV_mesh_shader);
+            if (profile != EEsProfile) {
+                symbolTable.setFunctionExtensions("barrier",                      Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setFunctionExtensions("memoryBarrierShared",          Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setFunctionExtensions("groupMemoryBarrier",           Num_AEP_mesh_shader, AEP_mesh_shader);
+            } else {
+                symbolTable.setFunctionExtensions("barrier",                      1, &E_GL_NV_mesh_shader);
+                symbolTable.setFunctionExtensions("memoryBarrierShared",          1, &E_GL_NV_mesh_shader);
+                symbolTable.setFunctionExtensions("groupMemoryBarrier",           1, &E_GL_NV_mesh_shader);
+            }
+            symbolTable.setFunctionExtensions("writePackedPrimitiveIndices4x8NV",  1, &E_GL_NV_mesh_shader);
         }
 
         if (profile != EEsProfile && version >= 450) {
+            // GL_EXT_Mesh_shader
+            symbolTable.setVariableExtensions("gl_PrimitivePointIndicesEXT",    1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_PrimitiveLineIndicesEXT",     1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_PrimitiveTriangleIndicesEXT", 1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_NumWorkGroups",               1, &E_GL_EXT_mesh_shader);
+
+            BuiltInVariable("gl_PrimitivePointIndicesEXT",    EbvPrimitivePointIndicesEXT,    symbolTable);
+            BuiltInVariable("gl_PrimitiveLineIndicesEXT",     EbvPrimitiveLineIndicesEXT,     symbolTable);
+            BuiltInVariable("gl_PrimitiveTriangleIndicesEXT", EbvPrimitiveTriangleIndicesEXT, symbolTable);
+            BuiltInVariable("gl_NumWorkGroups",        EbvNumWorkGroups,        symbolTable);
+
+            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_Position",     1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_PointSize",    1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_ClipDistance", 1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_CullDistance", 1, &E_GL_EXT_mesh_shader);
+            
+            BuiltInVariable("gl_MeshVerticesEXT", "gl_Position",     EbvPosition,     symbolTable);
+            BuiltInVariable("gl_MeshVerticesEXT", "gl_PointSize",    EbvPointSize,    symbolTable);
+            BuiltInVariable("gl_MeshVerticesEXT", "gl_ClipDistance", EbvClipDistance, symbolTable);
+            BuiltInVariable("gl_MeshVerticesEXT", "gl_CullDistance", EbvCullDistance, symbolTable);
+            
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveID",             1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_Layer",                   1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_ViewportIndex",           1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT",        1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_mesh_shader);
+
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveID",              EbvPrimitiveId,    symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_Layer",                    EbvLayer,          symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_ViewportIndex",            EbvViewportIndex,  symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT",         EbvCullPrimitiveEXT, symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT",  EbvPrimitiveShadingRateKHR, symbolTable);
+
+            symbolTable.setFunctionExtensions("SetMeshOutputsEXT",  1, &E_GL_EXT_mesh_shader);
+
             // GL_EXT_device_group
             symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
             BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
@@ -8944,6 +9086,9 @@
             if (version >= 460) {
                 BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable);
             }
+            // GL_EXT_multiview
+            BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
+            symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
 
             // GL_ARB_shader_ballot
             symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
@@ -8961,9 +9106,12 @@
             BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
             BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 
-            if (spvVersion.vulkan > 0)
+            if (spvVersion.vulkan > 0) {
                 // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
                 SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+                if (language == EShLangFragment)
+                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
+            }
             else
                 BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
         }
@@ -9013,16 +9161,24 @@
         }
         break;
 
-    case EShLangTaskNV:
+    case EShLangTask:
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
             symbolTable.setVariableExtensions("gl_TaskCountNV",          1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
+            if (profile != EEsProfile) {
+                symbolTable.setVariableExtensions("gl_WorkGroupSize",        Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_WorkGroupID",          Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationID",    Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader);
+            } else {
+                symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
+            }
 
             BuiltInVariable("gl_TaskCountNV",          EbvTaskCountNV,          symbolTable);
             BuiltInVariable("gl_WorkGroupSize",        EbvWorkGroupSize,        symbolTable);
@@ -9036,12 +9192,23 @@
             symbolTable.setVariableExtensions("gl_MaxTaskWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",     1, &E_GL_NV_mesh_shader);
 
-            symbolTable.setFunctionExtensions("barrier",                   1, &E_GL_NV_mesh_shader);
-            symbolTable.setFunctionExtensions("memoryBarrierShared",       1, &E_GL_NV_mesh_shader);
-            symbolTable.setFunctionExtensions("groupMemoryBarrier",        1, &E_GL_NV_mesh_shader);
+            if (profile != EEsProfile) {
+                symbolTable.setFunctionExtensions("barrier",                   Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setFunctionExtensions("memoryBarrierShared",       Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setFunctionExtensions("groupMemoryBarrier",        Num_AEP_mesh_shader, AEP_mesh_shader);
+            } else {
+                symbolTable.setFunctionExtensions("barrier",                   1, &E_GL_NV_mesh_shader);
+                symbolTable.setFunctionExtensions("memoryBarrierShared",       1, &E_GL_NV_mesh_shader);
+                symbolTable.setFunctionExtensions("groupMemoryBarrier",        1, &E_GL_NV_mesh_shader);
+            }
         }
 
         if (profile != EEsProfile && version >= 450) {
+            // GL_EXT_mesh_shader
+            symbolTable.setFunctionExtensions("EmitMeshTasksEXT",          1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_NumWorkGroups",        1, &E_GL_EXT_mesh_shader);
+            BuiltInVariable("gl_NumWorkGroups",        EbvNumWorkGroups,        symbolTable);
+
             // GL_EXT_device_group
             symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
             BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
@@ -9069,9 +9236,12 @@
             BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
             BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 
-            if (spvVersion.vulkan > 0)
+            if (spvVersion.vulkan > 0) {
                 // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
                 SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+                if (language == EShLangFragment)
+                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
+            }
             else
                 BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
         }
@@ -9665,17 +9835,27 @@
             symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR);
         }
         break;
-    case EShLangMeshNV:
+    case EShLangMesh:
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
             symbolTable.relateToOperator("writePackedPrimitiveIndices4x8NV", EOpWritePackedPrimitiveIndices4x8NV);
+            symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
+            symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
+            symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
         }
-        // fall through
-    case EShLangTaskNV:
+
+        if (profile != EEsProfile && version >= 450) {
+            symbolTable.relateToOperator("SetMeshOutputsEXT", EOpSetMeshOutputsEXT);
+        }
+        break;
+    case EShLangTask:
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
             symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
             symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
             symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
         }
+        if (profile != EEsProfile && version >= 450) {
+            symbolTable.relateToOperator("EmitMeshTasksEXT", EOpEmitMeshTasksEXT);
+        }
         break;
 
     default:
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 1283f44..6a43ef3 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -2733,10 +2733,10 @@
     TIntermAggregate* loopSequence = (initializer == nullptr ||
                                       initializer->getAsAggregate() == nullptr) ? makeAggregate(initializer, loc)
                                                                                 : initializer->getAsAggregate();
-    if (loopSequence != nullptr && loopSequence->getOp() == EOpSequence)
+    if (loopSequence != nullptr && (loopSequence->getOp() == EOpSequence || loopSequence->getOp() == EOpScope))
         loopSequence->setOp(EOpNull);
     loopSequence = growAggregate(loopSequence, node);
-    loopSequence->setOperator(EOpSequence);
+    loopSequence->setOperator(getDebugInfo() ? EOpScope : EOpSequence);
 
     return loopSequence;
 }
@@ -2766,7 +2766,7 @@
         return;
 
     if (exp->getBasicType() == EbtInt || exp->getBasicType() == EbtUint ||
-        exp->getBasicType() == EbtFloat || exp->getBasicType() == EbtFloat16) {
+        exp->getBasicType() == EbtFloat) {
         if (parentPrecision != EpqNone && exp->getQualifier().precision == EpqNone) {
             exp->propagatePrecision(parentPrecision);
         }
@@ -3284,7 +3284,7 @@
 void TIntermUnary::updatePrecision()
 {
     if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
-        getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
+        getBasicType() == EbtFloat) {
         if (operand->getQualifier().precision > getQualifier().precision)
             getQualifier().precision = operand->getQualifier().precision;
     }
@@ -3785,7 +3785,7 @@
 void TIntermAggregate::updatePrecision()
 {
     if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
-        getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
+        getBasicType() == EbtFloat) {
         TPrecisionQualifier maxPrecision = EpqNone;
         TIntermSequence operands = getSequence();
         for (unsigned int i = 0; i < operands.size(); ++i) {
@@ -3807,7 +3807,7 @@
 void TIntermBinary::updatePrecision()
 {
      if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
-         getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
+         getBasicType() == EbtFloat) {
        if (op == EOpRightShift || op == EOpLeftShift) {
          // For shifts get precision from left side only and thus no need to propagate
          getQualifier().precision = left->getQualifier().precision;
@@ -3902,7 +3902,7 @@
         case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
         case EbtFloat: PROMOTE(setDConst, double, Get); break; \
         case EbtDouble: PROMOTE(setDConst, double, Get); break; \
-        case EbtInt8: PROMOTE(setI8Const, char, Get); break; \
+        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
         case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
         case EbtInt: PROMOTE(setIConst, int, Get); break; \
         case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index 1da50d6..616580f 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -74,6 +74,9 @@
 {
     if (messages & EShMsgOnlyPreprocessor)
         return;
+    // If enhanced msg readability, only print one error
+    if (messages & EShMsgEnhanced && numErrors > 0)
+        return;
     va_list args;
     va_start(args, szExtraInfoFormat);
     outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 7f2f171..e2ac43c 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -502,6 +502,16 @@
                 error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), "");
                 variable = nullptr;
             }
+
+            if (language == EShLangMesh && variable) {
+                TLayoutGeometry primitiveType = intermediate.getOutputPrimitive();
+                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(), "");
+                    variable = nullptr;
+                }
+            }
         } else {
             if (symbol)
                 error(loc, "variable name expected", string->c_str(), "");
@@ -716,8 +726,8 @@
             (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut &&
                 ! type.getQualifier().patch) ||
             (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
-                type.getQualifier().pervertexNV) ||
-            (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut &&
+                (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) ||
+            (language == EShLangMesh && type.getQualifier().storage == EvqVaryingOut &&
                 !type.getQualifier().perTaskNV));
 }
 
@@ -794,7 +804,7 @@
 
         // As I/O array sizes don't change, fetch requiredSize only once,
         // except for mesh shaders which could have different I/O array sizes based on type qualifiers.
-        if (firstIteration || (language == EShLangMeshNV)) {
+        if (firstIteration || (language == EShLangMesh)) {
             requiredSize = getIoArrayImplicitSize(type.getQualifier(), &featureString);
             if (requiredSize == 0)
                 break;
@@ -823,10 +833,11 @@
         // Number of vertices for Fragment shader is always three.
         expectedSize = 3;
         str = "vertices";
-    } else if (language == EShLangMeshNV) {
+    } else if (language == EShLangMesh) {
         unsigned int maxPrimitives =
             intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
-        if (qualifier.builtIn == EbvPrimitiveIndicesNV) {
+        if (qualifier.builtIn == EbvPrimitiveIndicesNV || qualifier.builtIn == EbvPrimitiveTriangleIndicesEXT ||
+            qualifier.builtIn == EbvPrimitiveLineIndicesEXT || qualifier.builtIn == EbvPrimitivePointIndicesEXT) {
             expectedSize = maxPrimitives * TQualifier::mapGeometryToSize(intermediate.getOutputPrimitive());
             str = "max_primitives*";
             str += TQualifier::getGeometryString(intermediate.getOutputPrimitive());
@@ -856,9 +867,9 @@
             error(loc, "inconsistent output number of vertices for array size of", feature, name.c_str());
         else if (language == EShLangFragment) {
             if (type.getOuterArraySize() > requiredSize)
-                error(loc, " cannot be greater than 3 for pervertexNV", feature, name.c_str());
+                error(loc, " cannot be greater than 3 for pervertexEXT", feature, name.c_str());
         }
-        else if (language == EShLangMeshNV)
+        else if (language == EShLangMesh)
             error(loc, "inconsistent output array size of", feature, name.c_str());
         else
             assert(0);
@@ -902,8 +913,10 @@
         result = intermediate.addBinaryMath(op, left, right, loc);
     }
 
-    if (result == nullptr)
-        binaryOpError(loc, str, left->getCompleteString(), right->getCompleteString());
+    if (result == nullptr) {
+        bool enhanced = intermediate.getEnhancedMsgs();
+        binaryOpError(loc, str, left->getCompleteString(enhanced), right->getCompleteString(enhanced));
+    }
 
     return result;
 }
@@ -926,8 +939,10 @@
 
     if (result)
         return result;
-    else
-        unaryOpError(loc, str, childNode->getCompleteString());
+    else {
+        bool enhanced = intermediate.getEnhancedMsgs();
+        unaryOpError(loc, str, childNode->getCompleteString(enhanced));
+    }
 
     return childNode;
 }
@@ -953,8 +968,8 @@
             requireProfile(loc, ~EEsProfile, feature);
             profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, feature);
         } else if (!base->getType().isCoopMat()) {
-            error(loc, "does not operate on this type:", field.c_str(), base->getType().getCompleteString().c_str());
-
+            bool enhanced = intermediate.getEnhancedMsgs();
+            error(loc, "does not operate on this type:", field.c_str(), base->getType().getCompleteString(enhanced).c_str());
             return base;
         }
 
@@ -1005,10 +1020,16 @@
                     intermediate.addIoAccessed(field);
             }
             inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier());
-        } else
-            error(loc, "no such field in structure", field.c_str(), "");
+        } else {
+            auto baseSymbol = base;
+            while (baseSymbol->getAsSymbolNode() == nullptr)
+                baseSymbol = baseSymbol->getAsBinaryNode()->getLeft();
+            TString structName;
+            structName.append("\'").append(baseSymbol->getAsSymbolNode()->getName().c_str()).append( "\'");
+            error(loc, "no such field in structure", field.c_str(), structName.c_str());
+        }
     } else
-        error(loc, "does not apply to this type:", field.c_str(), base->getType().getCompleteString().c_str());
+        error(loc, "does not apply to this type:", field.c_str(), base->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str());
 
     // Propagate noContraction up the dereference chain
     if (base->getQualifier().isNoContraction())
@@ -1314,14 +1335,14 @@
             //
             result = addConstructor(loc, arguments, type);
             if (result == nullptr)
-                error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), "");
+                error(loc, "cannot construct with these arguments", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str(), "");
         }
     } else {
         //
         // Find it in the symbol table.
         //
         const TFunction* fnCandidate;
-        bool builtIn;
+        bool builtIn {false};
         fnCandidate = findFunction(loc, *function, builtIn);
         if (fnCandidate) {
             // This is a declared function that might map to
@@ -1494,7 +1515,7 @@
         else
             error(arguments->getLoc(), " wrong operand type", "Internal Error",
                                       "built in unary operator function.  Type: %s",
-                                      static_cast<TIntermTyped*>(arguments)->getCompleteString().c_str());
+                                      static_cast<TIntermTyped*>(arguments)->getCompleteString(intermediate.getEnhancedMsgs()).c_str());
     } else if (result->getAsOperator())
         builtInOpCheck(loc, function, *result->getAsOperator());
 
@@ -1990,18 +2011,18 @@
         break;
     }
 
-    if ((semantics & gl_SemanticsAcquire) && 
+    if ((semantics & gl_SemanticsAcquire) &&
         (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore)) {
         error(loc, "gl_SemanticsAcquire must not be used with (image) atomic store",
               fnCandidate.getName().c_str(), "");
     }
-    if ((semantics & gl_SemanticsRelease) && 
+    if ((semantics & gl_SemanticsRelease) &&
         (callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpImageAtomicLoad)) {
         error(loc, "gl_SemanticsRelease must not be used with (image) atomic load",
               fnCandidate.getName().c_str(), "");
     }
-    if ((semantics & gl_SemanticsAcquireRelease) && 
-        (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore || 
+    if ((semantics & gl_SemanticsAcquireRelease) &&
+        (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore ||
          callNode.getOp() == EOpAtomicLoad  || callNode.getOp() == EOpImageAtomicLoad)) {
         error(loc, "gl_SemanticsAcquireRelease must not be used with (image) atomic load/store",
               fnCandidate.getName().c_str(), "");
@@ -2317,7 +2338,7 @@
             error(loc, "argument must be compile-time constant", "payload number", "a");
         else {
             unsigned int location = (*argp)[10]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
-            if (intermediate.checkLocationRT(0, location) < 0)
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(0, location) < 0)
                 error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location);
         }
         break;
@@ -2330,7 +2351,7 @@
             error(loc, "argument must be compile-time constant", "callable data number", "");
         else {
             unsigned int location = (*argp)[1]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
-            if (intermediate.checkLocationRT(1, location) < 0)
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(1, location) < 0)
                 error(loc, "with layout(location =", "no callableDataEXT/callableDataInEXT declared", "%d)", location);
         }
         break;
@@ -2452,7 +2473,7 @@
         const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true , true);
         const TType* refType = (base->getType().isReference()) ? base->getType().getReferentType() : nullptr;
         const TQualifier& qualifier = (refType != nullptr) ? refType->getQualifier() : base->getType().getQualifier();
-        if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer)
+        if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer && qualifier.storage != EvqtaskPayloadSharedEXT)
             error(loc,"Atomic memory function can only be used for shader storage block member or shared variable.",
             fnCandidate.getName().c_str(), "");
 
@@ -2495,6 +2516,8 @@
 
     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");
         intermediate.setMultiStream();
         break;
 
@@ -2548,7 +2571,7 @@
         }
 
         if (profile != EEsProfile && version < 450) {
-            if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat && 
+            if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat &&
                 (*argp)[0]->getAsTyped()->getBasicType() != EbtDouble &&
                 (*argp)[1]->getAsTyped()->getBasicType() != EbtFloat &&
                 (*argp)[1]->getAsTyped()->getBasicType() != EbtDouble &&
@@ -2597,23 +2620,24 @@
         // Check that if extended types are being used that the correct extensions are enabled.
         if (arg0 != nullptr) {
             const TType& type = arg0->getType();
+            bool enhanced = intermediate.getEnhancedMsgs();
             switch (type.getBasicType()) {
             default:
                 break;
             case EbtInt8:
             case EbtUint8:
-                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int8, type.getCompleteString().c_str());
+                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int8, type.getCompleteString(enhanced).c_str());
                 break;
             case EbtInt16:
             case EbtUint16:
-                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int16, type.getCompleteString().c_str());
+                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int16, type.getCompleteString(enhanced).c_str());
                 break;
             case EbtInt64:
             case EbtUint64:
-                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int64, type.getCompleteString().c_str());
+                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int64, type.getCompleteString(enhanced).c_str());
                 break;
             case EbtFloat16:
-                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_float16, type.getCompleteString().c_str());
+                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_float16, type.getCompleteString(enhanced).c_str());
                 break;
             }
         }
@@ -2786,7 +2810,10 @@
     TOperator op = intermediate.mapTypeToConstructorOp(type);
 
     if (op == EOpNull) {
-        error(loc, "cannot construct this type", type.getBasicString(), "");
+      if (intermediate.getEnhancedMsgs() && type.getBasicType() == EbtSampler)
+            error(loc, "function not supported in this version; use texture() instead", "texture*D*", "");
+        else
+            error(loc, "cannot construct this type", type.getBasicString(), "");
         op = EOpConstructFloat;
         TType errorType(EbtFloat);
         type.shallowCopy(errorType);
@@ -2972,7 +2999,17 @@
         if (isEsProfile() && intermediate.getEarlyFragmentTests())
             message = "can't modify gl_FragDepth if using early_fragment_tests";
         break;
+    case EvqFragStencil:
+        intermediate.setStencilReplacing();
+        // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader."
+        if (isEsProfile() && intermediate.getEarlyFragmentTests())
+            message = "can't modify EvqFragStencil if using early_fragment_tests";
+        break;
 
+    case EvqtaskPayloadSharedEXT:
+        if (language == EShLangMesh)
+            message = "can't modify variable with storage qualifier taskPayloadSharedEXT in mesh shaders";
+        break;
     default:
         break;
     }
@@ -3011,7 +3048,7 @@
         if (symNode && symNode->getQualifier().isExplicitInterpolation())
             error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str());
 
-    // local_size_{xyz} must be assigned or specialized before gl_WorkGroupSize can be assigned. 
+    // local_size_{xyz} must be assigned or specialized before gl_WorkGroupSize can be assigned.
     if(node->getQualifier().builtIn == EbvWorkGroupSize &&
        !(intermediate.isLocalSizeSet() || intermediate.isLocalSizeSpecialized()))
         error(loc, "can't read from gl_WorkGroupSize before a fixed workgroup size has been declared", op, "");
@@ -3196,6 +3233,12 @@
         break;
     }
 
+    TString constructorString;
+    if (intermediate.getEnhancedMsgs())
+        constructorString.append(type.getCompleteString(true, false, false, true)).append(" constructor");
+    else
+        constructorString.append("constructor");
+
     // See if it's a matrix
     bool constructingMatrix = false;
     switch (op) {
@@ -3253,7 +3296,7 @@
         if (function[arg].type->isArray()) {
             if (function[arg].type->isUnsizedArray()) {
                 // Can't construct from an unsized array.
-                error(loc, "array argument must be sized", "constructor", "");
+                error(loc, "array argument must be sized", constructorString.c_str(), "");
                 return true;
             }
             arrayArg = true;
@@ -3283,13 +3326,13 @@
             intArgument = true;
         if (type.isStruct()) {
             if (function[arg].type->contains16BitFloat()) {
-                requireFloat16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type");
+                requireFloat16Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 16-bit type");
             }
             if (function[arg].type->contains16BitInt()) {
-                requireInt16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type");
+                requireInt16Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 16-bit type");
             }
             if (function[arg].type->contains8BitInt()) {
-                requireInt8Arithmetic(loc, "constructor", "can't construct structure containing 8-bit type");
+                requireInt8Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 8-bit type");
             }
         }
     }
@@ -3303,9 +3346,9 @@
     case EOpConstructF16Vec3:
     case EOpConstructF16Vec4:
         if (type.isArray())
-            requireFloat16Arithmetic(loc, "constructor", "16-bit arrays not supported");
+            requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported");
         if (type.isVector() && function.getParamCount() != 1)
-            requireFloat16Arithmetic(loc, "constructor", "16-bit vectors only take vector types");
+            requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types");
         break;
     case EOpConstructUint16:
     case EOpConstructU16Vec2:
@@ -3316,9 +3359,9 @@
     case EOpConstructI16Vec3:
     case EOpConstructI16Vec4:
         if (type.isArray())
-            requireInt16Arithmetic(loc, "constructor", "16-bit arrays not supported");
+            requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported");
         if (type.isVector() && function.getParamCount() != 1)
-            requireInt16Arithmetic(loc, "constructor", "16-bit vectors only take vector types");
+            requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types");
         break;
     case EOpConstructUint8:
     case EOpConstructU8Vec2:
@@ -3329,9 +3372,9 @@
     case EOpConstructI8Vec3:
     case EOpConstructI8Vec4:
         if (type.isArray())
-            requireInt8Arithmetic(loc, "constructor", "8-bit arrays not supported");
+            requireInt8Arithmetic(loc, constructorString.c_str(), "8-bit arrays not supported");
         if (type.isVector() && function.getParamCount() != 1)
-            requireInt8Arithmetic(loc, "constructor", "8-bit vectors only take vector types");
+            requireInt8Arithmetic(loc, constructorString.c_str(), "8-bit vectors only take vector types");
         break;
     default:
         break;
@@ -3413,7 +3456,7 @@
 
     if (type.isArray()) {
         if (function.getParamCount() == 0) {
-            error(loc, "array constructor must have at least one argument", "constructor", "");
+            error(loc, "array constructor must have at least one argument", constructorString.c_str(), "");
             return true;
         }
 
@@ -3421,7 +3464,7 @@
             // auto adapt the constructor type to the number of arguments
             type.changeOuterArraySize(function.getParamCount());
         } else if (type.getOuterArraySize() != function.getParamCount()) {
-            error(loc, "array constructor needs one argument per array element", "constructor", "");
+            error(loc, "array constructor needs one argument per array element", constructorString.c_str(), "");
             return true;
         }
 
@@ -3434,7 +3477,7 @@
             // At least the dimensionalities have to match.
             if (! function[0].type->isArray() ||
                     arraySizes.getNumDims() != function[0].type->getArraySizes()->getNumDims() + 1) {
-                error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
+                error(loc, "array constructor argument not correct type to construct array element", constructorString.c_str(), "");
                 return true;
             }
 
@@ -3451,7 +3494,7 @@
     }
 
     if (arrayArg && op != EOpConstructStruct && ! type.isArrayOfArrays()) {
-        error(loc, "constructing non-array constituent from array argument", "constructor", "");
+        error(loc, "constructing non-array constituent from array argument", constructorString.c_str(), "");
         return true;
     }
 
@@ -3461,51 +3504,51 @@
         // "If a matrix argument is given to a matrix constructor,
         // it is a compile-time error to have any other arguments."
         if (function.getParamCount() != 1)
-            error(loc, "matrix constructed from matrix can only have one argument", "constructor", "");
+            error(loc, "matrix constructed from matrix can only have one argument", constructorString.c_str(), "");
         return false;
     }
 
     if (overFull) {
-        error(loc, "too many arguments", "constructor", "");
+        error(loc, "too many arguments", constructorString.c_str(), "");
         return true;
     }
 
     if (op == EOpConstructStruct && ! type.isArray() && (int)type.getStruct()->size() != function.getParamCount()) {
-        error(loc, "Number of constructor parameters does not match the number of structure fields", "constructor", "");
+        error(loc, "Number of constructor parameters does not match the number of structure fields", constructorString.c_str(), "");
         return true;
     }
 
     if ((op != EOpConstructStruct && size != 1 && size < type.computeNumComponents()) ||
         (op == EOpConstructStruct && size < type.computeNumComponents())) {
-        error(loc, "not enough data provided for construction", "constructor", "");
+        error(loc, "not enough data provided for construction", constructorString.c_str(), "");
         return true;
     }
 
     if (type.isCoopMat() && function.getParamCount() != 1) {
-        error(loc, "wrong number of arguments", "constructor", "");
+        error(loc, "wrong number of arguments", constructorString.c_str(), "");
         return true;
     }
     if (type.isCoopMat() &&
         !(function[0].type->isScalar() || function[0].type->isCoopMat())) {
-        error(loc, "Cooperative matrix constructor argument must be scalar or cooperative matrix", "constructor", "");
+        error(loc, "Cooperative matrix constructor argument must be scalar or cooperative matrix", constructorString.c_str(), "");
         return true;
     }
 
     TIntermTyped* typed = node->getAsTyped();
     if (typed == nullptr) {
-        error(loc, "constructor argument does not have a type", "constructor", "");
+        error(loc, "constructor argument does not have a type", constructorString.c_str(), "");
         return true;
     }
     if (op != EOpConstructStruct && op != EOpConstructNonuniform && typed->getBasicType() == EbtSampler) {
-        error(loc, "cannot convert a sampler", "constructor", "");
+        error(loc, "cannot convert a sampler", constructorString.c_str(), "");
         return true;
     }
     if (op != EOpConstructStruct && typed->isAtomic()) {
-        error(loc, "cannot convert an atomic_uint", "constructor", "");
+        error(loc, "cannot convert an atomic_uint", constructorString.c_str(), "");
         return true;
     }
     if (typed->getBasicType() == EbtVoid) {
-        error(loc, "cannot convert a void", "constructor", "");
+        error(loc, "cannot convert a void", constructorString.c_str(), "");
         return true;
     }
 
@@ -3784,7 +3827,7 @@
     if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble)
         profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
 
-    if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV()) {
+    if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV() && !qualifier.isPervertexEXT()) {
         if (isTypeInt(publicType.basicType) ||
             publicType.basicType == EbtDouble ||
             (publicType.userDef && (   publicType.userDef->containsBasicType(EbtInt)
@@ -3803,6 +3846,9 @@
     if (qualifier.isPatch() && qualifier.isInterpolation())
         error(loc, "cannot use interpolation qualifiers with patch", "patch", "");
 
+    if (qualifier.isTaskPayload() && publicType.basicType == EbtBlock)
+        error(loc, "taskPayloadSharedEXT variables should not be declared as interface blocks", "taskPayloadSharedEXT", "");
+
     if (qualifier.isTaskMemory() && publicType.basicType != EbtBlock)
         error(loc, "taskNV variables can be declared only as blocks", "taskNV", "");
 
@@ -3960,7 +4006,7 @@
                    (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
                    (src.subgroupcoherent  && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.shadercallcoherent)) ||
                    (src.shadercallcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)))) {
-        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed", 
+        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed",
             GetPrecisionQualifierString(src.precision), "");
     }
 #endif
@@ -4318,10 +4364,10 @@
                 extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
                 return;
         break;
-    case EShLangMeshNV:
+    case EShLangMesh:
         if (qualifier.storage == EvqVaryingOut)
             if ((isEsProfile() && version >= 320) ||
-                extensionTurnedOn(E_GL_NV_mesh_shader))
+                extensionsTurnedOn(Num_AEP_mesh_shader, AEP_mesh_shader))
                 return;
         break;
     default:
@@ -4589,7 +4635,7 @@
 
     if (ssoPre150 ||
         (identifier == "gl_FragDepth"           && ((nonEsRedecls && version >= 420) || esRedecls)) ||
-        (identifier == "gl_FragCoord"           && ((nonEsRedecls && version >= 150) || esRedecls)) ||
+        (identifier == "gl_FragCoord"           && ((nonEsRedecls && version >= 140) || esRedecls)) ||
          identifier == "gl_ClipDistance"                                                            ||
          identifier == "gl_CullDistance"                                                            ||
          identifier == "gl_ShadingRateEXT"                                                          ||
@@ -4605,6 +4651,9 @@
          identifier == "gl_SampleMask"                                                              ||
          identifier == "gl_Layer"                                                                   ||
          identifier == "gl_PrimitiveIndicesNV"                                                      ||
+         identifier == "gl_PrimitivePointIndicesEXT"                                                ||
+         identifier == "gl_PrimitiveLineIndicesEXT"                                                 ||
+         identifier == "gl_PrimitiveTriangleIndicesEXT"                                             ||
          identifier == "gl_TexCoord") {
 
         // Find the existing symbol, if any.
@@ -4658,7 +4707,7 @@
                 symbolQualifier.storage != qualifier.storage)
                 error(loc, "cannot change qualification of", "redeclaration", symbol->getName().c_str());
         } else if (identifier == "gl_FragCoord") {
-            if (intermediate.inIoAccessed("gl_FragCoord"))
+            if (!intermediate.getTexCoordRedeclared() && intermediate.inIoAccessed("gl_FragCoord"))
                 error(loc, "cannot redeclare after use", "gl_FragCoord", "");
             if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
                 qualifier.isMemory() || qualifier.isAuxiliary())
@@ -4668,6 +4717,9 @@
             if (! builtIn && (publicType.pixelCenterInteger != intermediate.getPixelCenterInteger() ||
                               publicType.originUpperLeft != intermediate.getOriginUpperLeft()))
                 error(loc, "cannot redeclare with different qualification:", "redeclaration", symbol->getName().c_str());
+
+
+            intermediate.setTexCoordRedeclared();
             if (publicType.pixelCenterInteger)
                 intermediate.setPixelCenterInteger();
             if (publicType.originUpperLeft)
@@ -4684,10 +4736,22 @@
                 if (! intermediate.setDepth(publicType.layoutDepth))
                     error(loc, "all redeclarations must use the same depth layout on", "redeclaration", symbol->getName().c_str());
             }
+        } else if (identifier == "gl_FragStencilRefARB") {
+            if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
+                qualifier.isMemory() || qualifier.isAuxiliary())
+                error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str());
+            if (qualifier.storage != EvqVaryingOut)
+                error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str());
+            if (publicType.layoutStencil != ElsNone) {
+                if (intermediate.inIoAccessed("gl_FragStencilRefARB"))
+                    error(loc, "cannot redeclare after use", "gl_FragStencilRefARB", "");
+                if (!intermediate.setStencil(publicType.layoutStencil))
+                    error(loc, "all redeclarations must use the same stencil layout on", "redeclaration",
+                          symbol->getName().c_str());
+            }
         }
         else if (
-            identifier == "gl_PrimitiveIndicesNV" ||
-            identifier == "gl_FragStencilRefARB") {
+            identifier == "gl_PrimitiveIndicesNV") {
             if (qualifier.hasLayout())
                 error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str());
             if (qualifier.storage != EvqVaryingOut)
@@ -4728,7 +4792,8 @@
     profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
 
     if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment" &&
-        blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV") {
+        blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV" &&
+        blockName != "gl_MeshPerVertexEXT" && blockName != "gl_MeshPerPrimitiveEXT") {
         error(loc, "cannot redeclare block: ", "block declaration", blockName.c_str());
         return;
     }
@@ -5297,11 +5362,11 @@
         if (!isEsProfile() && version < 430)
             requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders");
         break;
-    case EShLangTaskNV:
-        requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "task shaders");
+    case EShLangTask:
+        requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "task shaders");
         break;
-    case EShLangMeshNV:
-        requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "mesh shaders");
+    case EShLangMesh:
+        requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "mesh shaders");
         break;
     default:
         break;
@@ -5411,12 +5476,12 @@
         intermediate.setUsePhysicalStorageBuffer();
         return;
     }
-    if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMeshNV) {
+    if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMesh) {
         if (id == TQualifier::getGeometryString(ElgTriangles)) {
             publicType.shaderQualifiers.geometry = ElgTriangles;
             return;
         }
-        if (language == EShLangGeometry || language == EShLangMeshNV) {
+        if (language == EShLangGeometry || language == EShLangMesh) {
             if (id == TQualifier::getGeometryString(ElgPoints)) {
                 publicType.shaderQualifiers.geometry = ElgPoints;
                 return;
@@ -5499,12 +5564,19 @@
     }
     if (language == EShLangFragment) {
         if (id == "origin_upper_left") {
-            requireProfile(loc, ECoreProfile | ECompatibilityProfile, "origin_upper_left");
+            requireProfile(loc, ECoreProfile | ECompatibilityProfile | ENoProfile, "origin_upper_left");
+            if (profile == ENoProfile) {
+                profileRequires(loc,ECoreProfile | ECompatibilityProfile, 140, E_GL_ARB_fragment_coord_conventions, "origin_upper_left");
+            }
+
             publicType.shaderQualifiers.originUpperLeft = true;
             return;
         }
         if (id == "pixel_center_integer") {
-            requireProfile(loc, ECoreProfile | ECompatibilityProfile, "pixel_center_integer");
+            requireProfile(loc, ECoreProfile | ECompatibilityProfile | ENoProfile, "pixel_center_integer");
+            if (profile == ENoProfile) {
+                profileRequires(loc,ECoreProfile | ECompatibilityProfile, 140, E_GL_ARB_fragment_coord_conventions, "pixel_center_integer");
+            }
             publicType.shaderQualifiers.pixelCenterInteger = true;
             return;
         }
@@ -5514,6 +5586,12 @@
             publicType.shaderQualifiers.earlyFragmentTests = true;
             return;
         }
+        if (id == "early_and_late_fragment_tests_amd") {
+            profileRequires(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, 420, E_GL_AMD_shader_early_and_late_fragment_tests, "early_and_late_fragment_tests_amd");
+            profileRequires(loc, EEsProfile, 310, nullptr, "early_and_late_fragment_tests_amd");
+            publicType.shaderQualifiers.earlyAndLateFragmentTestsAMD = true;
+            return;
+        }
         if (id == "post_depth_coverage") {
             requireExtensions(loc, Num_post_depth_coverageEXTs, post_depth_coverageEXTs, "post depth coverage");
             if (extensionTurnedOn(E_GL_ARB_post_depth_coverage)) {
@@ -5530,6 +5608,14 @@
                 return;
             }
         }
+        for (TLayoutStencil stencil = (TLayoutStencil)(ElsNone + 1); stencil < ElsCount; stencil = (TLayoutStencil)(stencil+1)) {
+            if (id == TQualifier::getLayoutStencilString(stencil)) {
+                requireProfile(loc, ECoreProfile | ECompatibilityProfile, "stencil layout qualifier");
+                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, nullptr, "stencil layout qualifier");
+                publicType.shaderQualifiers.layoutStencil = stencil;
+                return;
+            }
+        }
         for (TInterlockOrdering order = (TInterlockOrdering)(EioNone + 1); order < EioCount; order = (TInterlockOrdering)(order+1)) {
             if (id == TQualifier::getInterlockOrderingString(order)) {
                 requireProfile(loc, ECoreProfile | ECompatibilityProfile, "fragment shader interlock layout qualifier");
@@ -5673,7 +5759,7 @@
         return;
     } else if (id == "location") {
         profileRequires(loc, EEsProfile, 300, nullptr, "location");
-        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; 
+        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
         // GL_ARB_explicit_uniform_location requires 330 or GL_ARB_explicit_attrib_location we do not need to add it here
         profileRequires(loc, ~EEsProfile, 330, 2, exts, "location");
         if ((unsigned int)value >= TQualifier::layoutLocationEnd)
@@ -5883,9 +5969,9 @@
         }
         break;
 
-    case EShLangMeshNV:
+    case EShLangMesh:
         if (id == "max_vertices") {
-            requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_vertices");
+            requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "max_vertices");
             publicType.shaderQualifiers.vertices = value;
             if (value > resources.maxMeshOutputVerticesNV)
                 error(loc, "too large, must be less than gl_MaxMeshOutputVerticesNV", "max_vertices", "");
@@ -5894,7 +5980,7 @@
             return;
         }
         if (id == "max_primitives") {
-            requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_primitives");
+            requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "max_primitives");
             publicType.shaderQualifiers.primitives = value;
             if (value > resources.maxMeshOutputPrimitivesNV)
                 error(loc, "too large, must be less than gl_MaxMeshOutputPrimitivesNV", "max_primitives", "");
@@ -5904,14 +5990,14 @@
         }
         // Fall through
 
-    case EShLangTaskNV:
+    case EShLangTask:
         // Fall through
 #endif
     case EShLangCompute:
         if (id.compare(0, 11, "local_size_") == 0) {
 #ifndef GLSLANG_WEB
-            if (language == EShLangMeshNV || language == EShLangTaskNV) {
-                requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "gl_WorkGroupSize");
+            if (language == EShLangMesh || language == EShLangTask) {
+                requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "gl_WorkGroupSize");
             } else {
                 profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize");
                 profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
@@ -6037,6 +6123,8 @@
             dst.layoutShaderRecord = true;
         if (src.pervertexNV)
             dst.pervertexNV = true;
+        if (src.pervertexEXT)
+            dst.pervertexEXT = true;
 #endif
     }
 }
@@ -6185,6 +6273,9 @@
             if (type.getBasicType() == EbtBlock)
                 error(loc, "cannot apply to uniform or buffer block", "location", "");
             break;
+        case EvqtaskPayloadSharedEXT:
+            error(loc, "cannot apply to taskPayloadSharedEXT", "location", "");
+            break;
 #ifndef GLSLANG_WEB
         case EvqPayload:
         case EvqPayloadIn:
@@ -6210,11 +6301,13 @@
 
 #ifndef GLSLANG_WEB
     if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) {
-        int repeated = intermediate.addXfbBufferOffset(type);
-        if (repeated >= 0)
-            error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer);
-        if (type.isUnsizedArray())
+        if (type.isUnsizedArray()) {
             error(loc, "unsized array", "xfb_offset", "in buffer %d", qualifier.layoutXfbBuffer);
+        } else {
+            int repeated = intermediate.addXfbBufferOffset(type);
+            if (repeated >= 0)
+                error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer);
+        }
 
         // "The offset must be a multiple of the size of the first component of the first
         // qualified variable or block member, or a compile-time error results. Further, if applied to an aggregate
@@ -6334,8 +6427,12 @@
         profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation);
     }
 
-    if (qualifier.isPushConstant() && type.getBasicType() != EbtBlock)
-        error(loc, "can only be used with a block", "push_constant", "");
+    if (qualifier.isPushConstant()) {
+        if (type.getBasicType() != EbtBlock)
+            error(loc, "can only be used with a block", "push_constant", "");
+        if (type.isArray())
+            error(loc, "Push constants blocks can't be an array", "push_constant", "");
+    }
 
     if (qualifier.hasBufferReference() && type.getBasicType() != EbtBlock)
         error(loc, "can only be used with a block", "buffer_reference", "");
@@ -6540,7 +6637,7 @@
             error(loc, message, "local_size id", "");
     }
     if (shaderQualifiers.vertices != TQualifier::layoutNotSet) {
-        if (language == EShLangGeometry || language == EShLangMeshNV)
+        if (language == EShLangGeometry || language == EShLangMesh)
             error(loc, message, "max_vertices", "");
         else if (language == EShLangTessControl)
             error(loc, message, "vertices", "");
@@ -6552,7 +6649,7 @@
     if (shaderQualifiers.postDepthCoverage)
         error(loc, message, "post_depth_coverage", "");
     if (shaderQualifiers.primitives != TQualifier::layoutNotSet) {
-        if (language == EShLangMeshNV)
+        if (language == EShLangMesh)
             error(loc, message, "max_primitives", "");
         else
             assert(0);
@@ -6652,8 +6749,10 @@
                       : findFunctionExact(loc, call, builtIn));
     else if (version < 120)
         function = findFunctionExact(loc, call, builtIn);
-    else if (version < 400)
-        function = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
+    else if (version < 400) {
+        bool needfindFunction400 = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) || extensionTurnedOn(E_GL_ARB_gpu_shader5);
+        function = needfindFunction400 ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
+    }
     else if (explicitTypesEnabled)
         function = findFunctionExplicitTypes(loc, call, builtIn);
     else
@@ -6961,12 +7060,14 @@
 
         TFunction realFunc(&name, function->getType());
 
+        // Use copyParam to avoid shared ownership of the 'type' field
+        // of the parameter.
         for (int i = 0; i < function->getParamCount(); ++i) {
-            realFunc.addParameter((*function)[i]);
+            realFunc.addParameter(TParameter().copyParam((*function)[i]));
         }
 
         TParameter tmpP = { 0, &uintType };
-        realFunc.addParameter(tmpP);
+        realFunc.addParameter(TParameter().copyParam(tmpP));
         arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(1, loc, true));
 
         result = handleFunctionCall(loc, &realFunc, arguments);
@@ -6979,11 +7080,11 @@
         TFunction realFunc(&name, function->getType());
 
         for (int i = 0; i < function->getParamCount(); ++i) {
-            realFunc.addParameter((*function)[i]);
+            realFunc.addParameter(TParameter().copyParam((*function)[i]));
         }
 
         TParameter tmpP = { 0, &uintType };
-        realFunc.addParameter(tmpP);
+        realFunc.addParameter(TParameter().copyParam(tmpP));
         arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(-1, loc, true));
 
         result = handleFunctionCall(loc, &realFunc, arguments);
@@ -7194,6 +7295,8 @@
             requireInt8Arithmetic(loc, "qualifier", "(u)int8 types can only be in uniform block or buffer storage");
     }
 
+    if (type.getQualifier().storage == EvqtaskPayloadSharedEXT)
+        intermediate.addTaskPayloadEXTCount();
     if (type.getQualifier().storage == EvqShared && type.containsCoopMat())
         error(loc, "qualifier", "Cooperative matrix types must not be used in shared memory", "");
 
@@ -7217,6 +7320,8 @@
         error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", "");
     if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.getDepth() != EldNone)
         error(loc, "can only apply depth layout to gl_FragDepth", "layout qualifier", "");
+    if (identifier != "gl_FragStencilRefARB" && publicType.shaderQualifiers.getStencil() != ElsNone)
+        error(loc, "can only apply depth layout to gl_FragStencilRefARB", "layout qualifier", "");
 
     // Check for redeclaration of built-ins and/or attempting to declare a reserved name
     TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers);
@@ -7424,14 +7529,14 @@
     // Uniforms require a compile-time constant initializer
     if (qualifier == EvqUniform && ! initializer->getType().getQualifier().isFrontEndConstant()) {
         error(loc, "uniform initializers must be constant", "=", "'%s'",
-              variable->getType().getCompleteString().c_str());
+              variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str());
         variable->getWritableType().getQualifier().makeTemporary();
         return nullptr;
     }
     // Global consts require a constant initializer (specialization constant is okay)
     if (qualifier == EvqConst && symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) {
         error(loc, "global const initializers must be constant", "=", "'%s'",
-              variable->getType().getCompleteString().c_str());
+              variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str());
         variable->getWritableType().getQualifier().makeTemporary();
         return nullptr;
     }
@@ -7494,7 +7599,7 @@
         TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc);
         TIntermTyped* initNode = intermediate.addAssign(EOpAssign, intermSymbol, initializer, loc);
         if (! initNode)
-            assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString());
+            assignError(loc, "=", intermSymbol->getCompleteString(intermediate.getEnhancedMsgs()), initializer->getCompleteString(intermediate.getEnhancedMsgs()));
 
         return initNode;
     }
@@ -7565,7 +7670,7 @@
         }
     } else if (type.isMatrix()) {
         if (type.getMatrixCols() != (int)initList->getSequence().size()) {
-            error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString().c_str());
+            error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
             return nullptr;
         }
         TType vectorType(type, 0); // dereferenced type
@@ -7576,20 +7681,20 @@
         }
     } else if (type.isVector()) {
         if (type.getVectorSize() != (int)initList->getSequence().size()) {
-            error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString().c_str());
+            error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
             return nullptr;
         }
         TBasicType destType = type.getBasicType();
         for (int i = 0; i < type.getVectorSize(); ++i) {
             TBasicType initType = initList->getSequence()[i]->getAsTyped()->getBasicType();
             if (destType != initType && !intermediate.canImplicitlyPromote(initType, destType)) {
-                error(loc, "type mismatch in initializer list", "initializer list", type.getCompleteString().c_str());
+                error(loc, "type mismatch in initializer list", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
                 return nullptr;
             }
 
         }
     } else {
-        error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str());
+        error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
         return nullptr;
     }
 
@@ -8053,12 +8158,12 @@
     case EOpConstructAccStruct:
         if ((node->getType().isScalar() && node->getType().getBasicType() == EbtUint64)) {
             // construct acceleration structure from uint64
-            requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uint64_t conversion to acclerationStructureEXT");
+            requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uint64_t conversion to acclerationStructureEXT");
             return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToAccStruct, true, node,
                 type);
         } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint && node->getVectorSize() == 2) {
             // construct acceleration structure from uint64
-            requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uvec2 conversion to accelerationStructureEXT");
+            requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uvec2 conversion to accelerationStructureEXT");
             return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToAccStruct, true, node,
                 type);
         } else
@@ -8097,8 +8202,9 @@
 {
     TIntermTyped* converted = intermediate.addConversion(EOpConstructStruct, type, node->getAsTyped());
     if (! converted || converted->getType() != type) {
+        bool enhanced = intermediate.getEnhancedMsgs();
         error(loc, "", "constructor", "cannot convert parameter %d from '%s' to '%s'", paramCount,
-              node->getAsTyped()->getType().getCompleteString().c_str(), type.getCompleteString().c_str());
+              node->getAsTyped()->getType().getCompleteString(enhanced).c_str(), type.getCompleteString(enhanced).c_str());
 
         return nullptr;
     }
@@ -8157,6 +8263,8 @@
             memberQualifier.perViewNV = currentBlockQualifier.perViewNV;
         if (currentBlockQualifier.perTaskNV)
             memberQualifier.perTaskNV = currentBlockQualifier.perTaskNV;
+        if (currentBlockQualifier.storage == EvqtaskPayloadSharedEXT)
+            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())
@@ -8457,23 +8565,23 @@
         // It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader
         // "Compute shaders do not permit user-defined input variables..."
         requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|
-            EShLangFragmentMask|EShLangMeshNVMask), "input block");
+            EShLangFragmentMask|EShLangMeshMask), "input block");
         if (language == EShLangFragment) {
             profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block");
-        } else if (language == EShLangMeshNV && ! qualifier.isTaskMemory()) {
+        } else if (language == EShLangMesh && ! qualifier.isTaskMemory()) {
             error(loc, "input blocks cannot be used in a mesh shader", "out", "");
         }
         break;
     case EvqVaryingOut:
         profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "output block");
         requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|
-            EShLangGeometryMask|EShLangMeshNVMask|EShLangTaskNVMask), "output block");
+            EShLangGeometryMask|EShLangMeshMask|EShLangTaskMask), "output block");
         // ES 310 can have a block before shader_io is turned on, so skip this test for built-ins
         if (language == EShLangVertex && ! parsingBuiltins) {
             profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block");
-        } else if (language == EShLangMeshNV && qualifier.isTaskMemory()) {
+        } else if (language == EShLangMesh && qualifier.isTaskMemory()) {
             error(loc, "can only use on input blocks in mesh shader", "taskNV", "");
-        } else if (language == EShLangTaskNV && ! qualifier.isTaskMemory()) {
+        } else if (language == EShLangTask && ! qualifier.isTaskMemory()) {
             error(loc, "output blocks cannot be used in a task shader", "out", "");
         }
         break;
@@ -8887,7 +8995,7 @@
 {
 #ifndef GLSLANG_WEB
     if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) {
-        assert(language == EShLangTessControl || language == EShLangGeometry || language == EShLangMeshNV);
+        assert(language == EShLangTessControl || language == EShLangGeometry || language == EShLangMesh);
         const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices";
 
         if (publicType.qualifier.storage != EvqVaryingOut)
@@ -8899,7 +9007,7 @@
             checkIoArraysConsistency(loc);
     }
     if (publicType.shaderQualifiers.primitives != TQualifier::layoutNotSet) {
-        assert(language == EShLangMeshNV);
+        assert(language == EShLangMesh);
         const char* id = "max_primitives";
 
         if (publicType.qualifier.storage != EvqVaryingOut)
@@ -8923,7 +9031,7 @@
             case ElgTrianglesAdjacency:
             case ElgQuads:
             case ElgIsolines:
-                if (language == EShLangMeshNV) {
+                if (language == EShLangMesh) {
                     error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
                     break;
                 }
@@ -8940,7 +9048,7 @@
             switch (publicType.shaderQualifiers.geometry) {
             case ElgLines:
             case ElgTriangles:
-                if (language != EShLangMeshNV) {
+                if (language != EShLangMesh) {
                     error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
                     break;
                 }
@@ -8996,24 +9104,56 @@
                             error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", "");
                     }
 #ifndef GLSLANG_WEB
-                    else if (language == EShLangMeshNV) {
+                    else if (language == EShLangMesh) {
                         switch (i) {
-                        case 0: max = resources.maxMeshWorkGroupSizeX_NV; break;
-                        case 1: max = resources.maxMeshWorkGroupSizeY_NV; break;
-                        case 2: max = resources.maxMeshWorkGroupSizeZ_NV; break;
+                        case 0:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxMeshWorkGroupSizeX_EXT :
+                                    resources.maxMeshWorkGroupSizeX_NV;
+                            break;
+                        case 1:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxMeshWorkGroupSizeY_EXT :
+                                    resources.maxMeshWorkGroupSizeY_NV ;
+                            break;
+                        case 2:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxMeshWorkGroupSizeZ_EXT :
+                                    resources.maxMeshWorkGroupSizeZ_NV ;
+                            break;
                         default: break;
                         }
-                        if (intermediate.getLocalSize(i) > (unsigned int)max)
-                            error(loc, "too large; see gl_MaxMeshWorkGroupSizeNV", "local_size", "");
-                    } else if (language == EShLangTaskNV) {
+                        if (intermediate.getLocalSize(i) > (unsigned int)max) {
+                            TString maxsErrtring = "too large, see ";
+                            maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                                    "gl_MaxMeshWorkGroupSizeEXT" : "gl_MaxMeshWorkGroupSizeNV");
+                            error(loc, maxsErrtring.c_str(), "local_size", "");
+                        }
+                    } else if (language == EShLangTask) {
                         switch (i) {
-                        case 0: max = resources.maxTaskWorkGroupSizeX_NV; break;
-                        case 1: max = resources.maxTaskWorkGroupSizeY_NV; break;
-                        case 2: max = resources.maxTaskWorkGroupSizeZ_NV; break;
+                        case 0:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxTaskWorkGroupSizeX_EXT :
+                                    resources.maxTaskWorkGroupSizeX_NV;
+                            break;
+                        case 1:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxTaskWorkGroupSizeY_EXT:
+                                    resources.maxTaskWorkGroupSizeY_NV;
+                            break;
+                        case 2:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxTaskWorkGroupSizeZ_EXT:
+                                    resources.maxTaskWorkGroupSizeZ_NV;
+                            break;
                         default: break;
                         }
-                        if (intermediate.getLocalSize(i) > (unsigned int)max)
-                            error(loc, "too large; see gl_MaxTaskWorkGroupSizeNV", "local_size", "");
+                        if (intermediate.getLocalSize(i) > (unsigned int)max) {
+                            TString maxsErrtring = "too large, see ";
+                            maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                                    "gl_MaxTaskWorkGroupSizeEXT" : "gl_MaxTaskWorkGroupSizeNV");
+                            error(loc, maxsErrtring.c_str(), "local_size", "");
+                        }
                     }
 #endif
                     else {
@@ -9048,6 +9188,12 @@
         else
             error(loc, "can only apply to 'in'", "early_fragment_tests", "");
     }
+    if (publicType.shaderQualifiers.earlyAndLateFragmentTestsAMD) {
+        if (publicType.qualifier.storage == EvqVaryingIn)
+            intermediate.setEarlyAndLateFragmentTestsAMD();
+        else
+            error(loc, "can only apply to 'in'", "early_and_late_fragment_tests_amd", "");
+    }
     if (publicType.shaderQualifiers.postDepthCoverage) {
         if (publicType.qualifier.storage == EvqVaryingIn)
             intermediate.setPostDepthCoverage();
@@ -9096,7 +9242,7 @@
             error(loc, "can only apply to 'in'", "derivative_group_linearNV", "");
     }
     // Check mesh out array sizes, once all the necessary out qualifiers are defined.
-    if ((language == EShLangMeshNV) &&
+    if ((language == EShLangMesh) &&
         (intermediate.getVertices() != TQualifier::layoutNotSet) &&
         (intermediate.getPrimitives() != TQualifier::layoutNotSet) &&
         (intermediate.getOutputPrimitive() != ElgNone))
@@ -9113,7 +9259,7 @@
         // Exit early as further checks are not valid
         return;
     }
-#endif 
+#endif
     const TQualifier& qualifier = publicType.qualifier;
 
     if (qualifier.isAuxiliary() ||
@@ -9311,4 +9457,3 @@
 }
 
 } // end namespace glslang
-
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index c387aed..7f51173 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -739,6 +739,7 @@
     (*KeywordMap)["f16subpassInputMS"] =            F16SUBPASSINPUTMS;
     (*KeywordMap)["__explicitInterpAMD"] =     EXPLICITINTERPAMD;
     (*KeywordMap)["pervertexNV"] =             PERVERTEXNV;
+    (*KeywordMap)["pervertexEXT"] =            PERVERTEXEXT;
     (*KeywordMap)["precise"] =                 PRECISE;
 
     (*KeywordMap)["rayPayloadNV"] =            PAYLOADNV;
@@ -757,6 +758,8 @@
     (*KeywordMap)["perprimitiveNV"] =          PERPRIMITIVENV;
     (*KeywordMap)["perviewNV"] =               PERVIEWNV;
     (*KeywordMap)["taskNV"] =                  PERTASKNV;
+    (*KeywordMap)["perprimitiveEXT"] =         PERPRIMITIVEEXT;
+    (*KeywordMap)["taskPayloadSharedEXT"] =    TASKPAYLOADWORKGROUPEXT;
 
     (*KeywordMap)["fcoopmatNV"] =              FCOOPMATNV;
     (*KeywordMap)["icoopmatNV"] =              ICOOPMATNV;
@@ -1719,6 +1722,12 @@
             return keyword;
         return identifierOrType();
 
+    case PERVERTEXEXT:
+        if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_fragment_shader_barycentric))
+            return keyword;
+        return identifierOrType();
+
     case PRECISE:
         if ((parseContext.isEsProfile() &&
              (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
@@ -1733,12 +1742,18 @@
     case PERPRIMITIVENV:
     case PERVIEWNV:
     case PERTASKNV:
-        if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
-            (parseContext.isEsProfile() && parseContext.version >= 320) ||
+        if (parseContext.symbolTable.atBuiltInLevel() ||
             parseContext.extensionTurnedOn(E_GL_NV_mesh_shader))
             return keyword;
         return identifierOrType();
 
+    case PERPRIMITIVEEXT:
+    case TASKPAYLOADWORKGROUPEXT:
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_EXT_mesh_shader))
+            return keyword;
+        return identifierOrType();
+
     case FCOOPMATNV:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index a2dd71c..57e3423 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -391,13 +391,13 @@
     // check for mesh
     if ((profile != EEsProfile && version >= 450) ||
         (profile == EEsProfile && version >= 320))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMeshNV, source,
+        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, EShLangTaskNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTask, source,
                                    infoSink, commonTable, symbolTables);
 #endif // !GLSLANG_ANGLE
 #endif // !GLSLANG_WEB
@@ -650,8 +650,8 @@
             version = 460;
         }
         break;
-    case EShLangMeshNV:
-    case EShLangTaskNV:
+    case EShLangMesh:
+    case EShLangTask:
         if ((profile == EEsProfile && version < 320) ||
             (profile != EEsProfile && version < 450)) {
             correct = false;
@@ -813,6 +813,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
     bool forwardCompatible,     // give errors for use of deprecated features
     EShMessages messages,       // warnings/errors/AST; things to print out
     TIntermediate& intermediate, // returned tree, etc.
@@ -900,6 +901,9 @@
         version = defaultVersion;
         profile = defaultProfile;
     }
+    if (source == EShSourceGlsl && overrideVersion != 0) {
+        version = overrideVersion;
+    }
 
     bool goodVersion = DeduceVersionProfile(compiler->infoSink, stage,
                                             versionNotFirst, defaultVersion, source, version, profile, spvVersion);
@@ -1275,6 +1279,7 @@
     int defaultVersion,         // use 100 for ES environment, 110 for desktop
     EProfile defaultProfile,
     bool forceDefaultVersionAndProfile,
+    int overrideVersion,        // use 0 if not overriding GLSL version
     bool forwardCompatible,     // give errors for use of deprecated features
     EShMessages messages,       // warnings/errors/AST; things to print out
     TShader::Includer& includer,
@@ -1285,7 +1290,7 @@
     DoPreprocessing parser(outputString);
     return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames,
                            preamble, optLevel, resources, defaultVersion,
-                           defaultProfile, forceDefaultVersionAndProfile,
+                           defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
                            forwardCompatible, messages, intermediate, parser,
                            false, includer, "", environment);
 }
@@ -1314,6 +1319,7 @@
     int defaultVersion,         // use 100 for ES environment, 110 for desktop
     EProfile defaultProfile,
     bool forceDefaultVersionAndProfile,
+    int overrideVersion,        // use 0 if not overriding GLSL version
     bool forwardCompatible,     // give errors for use of deprecated features
     EShMessages messages,       // warnings/errors/AST; things to print out
     TIntermediate& intermediate,// returned tree, etc.
@@ -1324,7 +1330,7 @@
     DoFullParse parser;
     return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames,
                            preamble, optLevel, resources, defaultVersion,
-                           defaultProfile, forceDefaultVersionAndProfile,
+                           defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
                            forwardCompatible, messages, intermediate, parser,
                            true, includer, sourceEntryPointName, environment);
 }
@@ -1498,7 +1504,7 @@
     TIntermediate intermediate(compiler->getLanguage());
     TShader::ForbidIncluder includer;
     bool success = CompileDeferred(compiler, shaderStrings, numStrings, inputLengths, nullptr,
-                                   "", optLevel, resources, defaultVersion, ENoProfile, false,
+                                   "", optLevel, resources, defaultVersion, ENoProfile, false, 0,
                                    forwardCompatible, messages, intermediate, includer);
 
     //
@@ -1759,7 +1765,7 @@
 };
 
 TShader::TShader(EShLanguage s)
-    : stage(s), lengths(nullptr), stringNames(nullptr), preamble("")
+    : stage(s), lengths(nullptr), stringNames(nullptr), preamble(""), overrideVersion(0)
 {
     pool = new TPoolAllocator;
     infoSink = new TInfoSink;
@@ -1828,7 +1834,15 @@
     intermediate->setUniqueId(id);
 }
 
+void TShader::setOverrideVersion(int version)
+{
+    overrideVersion = version;
+}
+
+void TShader::setDebugInfo(bool debugInfo)              { intermediate->setDebugInfo(debugInfo); }
 void TShader::setInvertY(bool invert)                   { intermediate->setInvertY(invert); }
+void TShader::setDxPositionW(bool invert)               { intermediate->setDxPositionW(invert); }
+void TShader::setEnhancedMsgs()                         { intermediate->setEnhancedMsgs(); }
 void TShader::setNanMinMaxClamp(bool useNonNan)         { intermediate->setNanMinMaxClamp(useNonNan); }
 
 #ifndef GLSLANG_WEB
@@ -1908,7 +1922,7 @@
 
     return CompileDeferred(compiler, strings, numStrings, lengths, stringNames,
                            preamble, EShOptNone, builtInResources, defaultVersion,
-                           defaultProfile, forceDefaultVersionAndProfile,
+                           defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
                            forwardCompatible, messages, *intermediate, includer, sourceEntryPointName,
                            &environment);
 }
@@ -1935,7 +1949,7 @@
 
     return PreprocessDeferred(compiler, strings, numStrings, lengths, stringNames, preamble,
                               EShOptNone, builtInResources, defaultVersion,
-                              defaultProfile, forceDefaultVersionAndProfile,
+                              defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
                               forwardCompatible, message, includer, *intermediate, output_string,
                               &environment);
 }
@@ -2048,6 +2062,8 @@
                                                 firstIntermediate->getVersion(),
                                                 firstIntermediate->getProfile());
         intermediate[stage]->setLimits(firstIntermediate->getLimits());
+        if (firstIntermediate->getEnhancedMsgs())
+            intermediate[stage]->setEnhancedMsgs();
 
         // The new TIntermediate must use the same origin as the original TIntermediates.
         // Otherwise linking will fail due to different coordinate systems.
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 5b7e27f..2f1b5ac 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -383,7 +383,7 @@
     for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) {
         TParameter param;
         parameters.push_back(param);
-        parameters.back().copyParam(copyOf.parameters[i]);
+        (void)parameters.back().copyParam(copyOf.parameters[i]);
     }
 
     extensions = nullptr;
@@ -426,12 +426,7 @@
     symTableLevel->thisLevel = thisLevel;
     symTableLevel->retargetedSymbols.clear();
     for (auto &s : retargetedSymbols) {
-        // Extra constructions to make sure they use the correct allocator pool
-        TString newFrom;
-        newFrom = s.first;
-        TString newTo;
-        newTo = s.second;
-        symTableLevel->retargetedSymbols.push_back({std::move(newFrom), std::move(newTo)});
+        symTableLevel->retargetedSymbols.push_back({s.first, s.second});
     }
     std::vector<bool> containerCopied(anonId, false);
     tLevel::const_iterator iter;
@@ -462,11 +457,7 @@
         TSymbol* sym = symTableLevel->find(s.second);
         if (!sym)
             continue;
-
-        // Need to declare and assign so newS is using the correct pool allocator
-        TString newS;
-        newS = s.first;
-        symTableLevel->insert(newS, sym);
+        symTableLevel->insert(s.first, sym);
     }
 
     return symTableLevel;
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
index 720999a..2e570bb 100644
--- a/glslang/MachineIndependent/SymbolTable.h
+++ b/glslang/MachineIndependent/SymbolTable.h
@@ -84,7 +84,7 @@
 class TSymbol {
 public:
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
-    explicit TSymbol(const TString *n) :  name(n), extensions(0), writable(true) { }
+    explicit TSymbol(const TString *n) :  name(n), uniqueId(0), extensions(0), writable(true) { }
     virtual TSymbol* clone() const = 0;
     virtual ~TSymbol() { }  // rely on all symbol owned memory coming from the pool
 
@@ -224,7 +224,7 @@
     TString *name;
     TType* type;
     TIntermTyped* defaultValue;
-    void copyParam(const TParameter& param)
+    TParameter& copyParam(const TParameter& param)
     {
         if (param.name)
             name = NewPoolTString(param.name->c_str());
@@ -232,6 +232,7 @@
             name = 0;
         type = param.type->clone();
         defaultValue = param.defaultValue;
+        return *this;
     }
     TBuiltInVariable getDeclaredBuiltIn() const { return type->getQualifier().declaredBuiltIn; }
 };
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 2fc0d9e..a5fd107 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -166,7 +166,8 @@
     } extensionData;
 
     const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4},
-                                   {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4}
+                                   {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4},
+                                   {E_GL_EXT_mesh_shader, EShTargetSpv_1_4}
                                  };
 
     for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) {
@@ -226,6 +227,8 @@
     extensionBehavior[E_GL_ARB_texture_query_lod]            = EBhDisable;
     extensionBehavior[E_GL_ARB_vertex_attrib_64bit]          = EBhDisable;
     extensionBehavior[E_GL_ARB_draw_instanced]               = EBhDisable;
+    extensionBehavior[E_GL_ARB_fragment_coord_conventions]   = EBhDisable;
+
 
     extensionBehavior[E_GL_KHR_shader_subgroup_basic]            = EBhDisable;
     extensionBehavior[E_GL_KHR_shader_subgroup_vote]             = EBhDisable;
@@ -257,6 +260,8 @@
     extensionBehavior[E_GL_EXT_shader_8bit_storage]                     = EBhDisable;
     extensionBehavior[E_GL_EXT_subgroup_uniform_control_flow]           = EBhDisable;
 
+    extensionBehavior[E_GL_EXT_fragment_shader_barycentric]             = EBhDisable;
+
     // #line and #include
     extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive]          = EBhDisable;
     extensionBehavior[E_GL_GOOGLE_include_directive]                 = EBhDisable;
@@ -271,6 +276,7 @@
     extensionBehavior[E_GL_AMD_shader_image_load_store_lod]          = EBhDisable;
     extensionBehavior[E_GL_AMD_shader_fragment_mask]                 = EBhDisable;
     extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch]          = EBhDisable;
+    extensionBehavior[E_GL_AMD_shader_early_and_late_fragment_tests] = EBhDisable;
 
     extensionBehavior[E_GL_INTEL_shader_integer_functions2]          = EBhDisable;
 
@@ -332,13 +338,16 @@
     extensionBehavior[E_GL_EXT_ray_tracing]                 = EBhDisable;
     extensionBehavior[E_GL_EXT_ray_query]                   = EBhDisable;
     extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable;
+    extensionBehavior[E_GL_EXT_ray_cull_mask]               = EBhDisable;
     extensionBehavior[E_GL_EXT_blend_func_extended]         = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
     extensionBehavior[E_GL_EXT_fragment_shading_rate]       = EBhDisable;
-    extensionBehavior[E_GL_EXT_shader_image_int64]   = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_image_int64]          = EBhDisable;
     extensionBehavior[E_GL_EXT_terminate_invocation]        = EBhDisable;
     extensionBehavior[E_GL_EXT_shared_memory_block]         = EBhDisable;
     extensionBehavior[E_GL_EXT_spirv_intrinsics]            = EBhDisable;
+    extensionBehavior[E_GL_EXT_mesh_shader]                 = EBhDisable;
+    extensionBehavior[E_GL_EXT_opacity_micromap]            = EBhDisable;
 
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
@@ -467,6 +476,7 @@
             "#define GL_ARB_texture_query_lod 1\n"
             "#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_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"
@@ -502,7 +512,9 @@
             "#define GL_EXT_ray_tracing 1\n"
             "#define GL_EXT_ray_query 1\n"
             "#define GL_EXT_ray_flags_primitive_culling 1\n"
+            "#define GL_EXT_ray_cull_mask 1\n"
             "#define GL_EXT_spirv_intrinsics 1\n"
+            "#define GL_EXT_mesh_shader 1\n"
 
             "#define GL_AMD_shader_ballot 1\n"
             "#define GL_AMD_shader_trinary_minmax 1\n"
@@ -549,6 +561,8 @@
 
             "#define GL_EXT_shader_atomic_float 1\n"
             "#define GL_EXT_shader_atomic_float2 1\n"
+
+            "#define GL_EXT_fragment_shader_barycentric 1\n"
             ;
 
         if (version >= 150) {
@@ -631,8 +645,8 @@
         case EShLangClosestHit:     preamble += "#define GL_CLOSEST_HIT_SHADER_EXT 1 \n";           break;
         case EShLangMiss:           preamble += "#define GL_MISS_SHADER_EXT 1 \n";                  break;
         case EShLangCallable:       preamble += "#define GL_CALLABLE_SHADER_EXT 1 \n";              break;
-        case EShLangTaskNV:         preamble += "#define GL_TASK_SHADER_NV 1 \n";                   break;
-        case EShLangMeshNV:         preamble += "#define GL_MESH_SHADER_NV 1 \n";                   break;
+        case EShLangTask:           preamble += "#define GL_TASK_SHADER_NV 1 \n";                   break;
+        case EShLangMesh:           preamble += "#define GL_MESH_SHADER_NV 1 \n";                   break;
         default:                                                                                    break;
         }
     }
@@ -658,8 +672,8 @@
     case EShLangClosestHit:     return "closest-hit";
     case EShLangMiss:           return "miss";
     case EShLangCallable:       return "callable";
-    case EShLangMeshNV:         return "mesh";
-    case EShLangTaskNV:         return "task";
+    case EShLangMesh:           return "mesh";
+    case EShLangTask:           return "task";
 #endif
     default:                    return "unknown stage";
     }
@@ -1050,10 +1064,22 @@
 {
     // GL_NV_mesh_shader extension is only allowed in task/mesh shaders
     if (strcmp(extension, "GL_NV_mesh_shader") == 0) {
-        requireStage(loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask | EShLangFragmentMask),
+        requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask),
                      "#extension GL_NV_mesh_shader");
         profileRequires(loc, ECoreProfile, 450, 0, "#extension GL_NV_mesh_shader");
         profileRequires(loc, EEsProfile, 320, 0, "#extension GL_NV_mesh_shader");
+        if (extensionTurnedOn(E_GL_EXT_mesh_shader)) {
+            error(loc, "GL_EXT_mesh_shader is already turned on, and not allowed with", "#extension", extension);
+        }
+    }
+    else if (strcmp(extension, "GL_EXT_mesh_shader") == 0) {
+        requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask),
+                     "#extension GL_EXT_mesh_shader");
+        profileRequires(loc, ECoreProfile, 450, 0, "#extension GL_EXT_mesh_shader");
+        profileRequires(loc, EEsProfile, 320, 0, "#extension GL_EXT_mesh_shader");
+        if (extensionTurnedOn(E_GL_NV_mesh_shader)) {
+            error(loc, "GL_NV_mesh_shader is already turned on, and not allowed with", "#extension", extension);
+        }
     }
 }
 
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 2dbac0b..f06abdd 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -162,6 +162,7 @@
 const char* const E_GL_ARB_texture_query_lod            = "GL_ARB_texture_query_lod";
 const char* const E_GL_ARB_vertex_attrib_64bit          = "GL_ARB_vertex_attrib_64bit";
 const char* const E_GL_ARB_draw_instanced               = "GL_ARB_draw_instanced";
+const char* const E_GL_ARB_fragment_coord_conventions   = "GL_ARB_fragment_coord_conventions";
 
 const char* const E_GL_KHR_shader_subgroup_basic            = "GL_KHR_shader_subgroup_basic";
 const char* const E_GL_KHR_shader_subgroup_vote             = "GL_KHR_shader_subgroup_vote";
@@ -200,6 +201,7 @@
 const char* const E_GL_EXT_ray_tracing                      = "GL_EXT_ray_tracing";
 const char* const E_GL_EXT_ray_query                        = "GL_EXT_ray_query";
 const char* const E_GL_EXT_ray_flags_primitive_culling      = "GL_EXT_ray_flags_primitive_culling";
+const char* const E_GL_EXT_ray_cull_mask                    = "GL_EXT_ray_cull_mask";
 const char* const E_GL_EXT_blend_func_extended              = "GL_EXT_blend_func_extended";
 const char* const E_GL_EXT_shader_implicit_conversions      = "GL_EXT_shader_implicit_conversions";
 const char* const E_GL_EXT_fragment_shading_rate            = "GL_EXT_fragment_shading_rate";
@@ -208,12 +210,19 @@
 const char* const E_GL_EXT_shared_memory_block              = "GL_EXT_shared_memory_block";
 const char* const E_GL_EXT_subgroup_uniform_control_flow    = "GL_EXT_subgroup_uniform_control_flow";
 const char* const E_GL_EXT_spirv_intrinsics                 = "GL_EXT_spirv_intrinsics";
+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";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
 const char* const post_depth_coverageEXTs[] = { E_GL_ARB_post_depth_coverage, E_GL_EXT_post_depth_coverage };
 const int Num_post_depth_coverageEXTs = sizeof(post_depth_coverageEXTs) / sizeof(post_depth_coverageEXTs[0]);
 
+// Array of extensions to cover both extensions providing ray tracing capabilities.
+const char* const ray_tracing_EXTs[] = { E_GL_EXT_ray_query, E_GL_EXT_ray_tracing };
+const int Num_ray_tracing_EXTs = sizeof(ray_tracing_EXTs) / sizeof(ray_tracing_EXTs[0]);
+
 // OVR extensions
 const char* const E_GL_OVR_multiview                    = "GL_OVR_multiview";
 const char* const E_GL_OVR_multiview2                   = "GL_OVR_multiview2";
@@ -235,6 +244,7 @@
 const char* const E_GL_AMD_shader_image_load_store_lod          = "GL_AMD_shader_image_load_store_lod";
 const char* const E_GL_AMD_shader_fragment_mask                 = "GL_AMD_shader_fragment_mask";
 const char* const E_GL_AMD_gpu_shader_half_float_fetch          = "GL_AMD_gpu_shader_half_float_fetch";
+const char* const E_GL_AMD_shader_early_and_late_fragment_tests = "GL_AMD_shader_early_and_late_fragment_tests";
 
 const char* const E_GL_INTEL_shader_integer_functions2          = "GL_INTEL_shader_integer_functions2";
 
@@ -280,7 +290,7 @@
 const char* const E_GL_EXT_tessellation_point_size              = "GL_EXT_tessellation_point_size";
 const char* const E_GL_EXT_texture_buffer                       = "GL_EXT_texture_buffer";
 const char* const E_GL_EXT_texture_cube_map_array               = "GL_EXT_texture_cube_map_array";
-const char* const E_GL_EXT_shader_integer_mix                   = "GL_EXT_shader_integer_mix"; 
+const char* const E_GL_EXT_shader_integer_mix                   = "GL_EXT_shader_integer_mix";
 
 // OES matching AEP
 const char* const E_GL_OES_geometry_shader                      = "GL_OES_geometry_shader";
@@ -341,6 +351,9 @@
 const char* const AEP_texture_cube_map_array[] = { E_GL_EXT_texture_cube_map_array, E_GL_OES_texture_cube_map_array };
 const int Num_AEP_texture_cube_map_array = sizeof(AEP_texture_cube_map_array)/sizeof(AEP_texture_cube_map_array[0]);
 
+const char* const AEP_mesh_shader[] = { E_GL_NV_mesh_shader, E_GL_EXT_mesh_shader };
+const int Num_AEP_mesh_shader = sizeof(AEP_mesh_shader)/sizeof(AEP_mesh_shader[0]);
+
 } // end namespace glslang
 
 #endif // _VERSIONS_INCLUDED_
diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4
index d4cc5bc..a59da44 100644
--- a/glslang/MachineIndependent/glslang.m4
+++ b/glslang/MachineIndependent/glslang.m4
@@ -315,7 +315,7 @@
 %token <lex> PATCH SAMPLE NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
-%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV PERPRIMITIVEEXT TASKPAYLOADWORKGROUPEXT
 %token <lex> PRECISE
 GLSLANG_WEB_EXCLUDE_OFF
 
@@ -798,7 +798,7 @@
         parseContext.rValueErrorCheck($5.loc, ":", $6);
         $$ = parseContext.intermediate.addSelection($1, $4, $6, $2.loc);
         if ($$ == 0) {
-            parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(), $6->getCompleteString());
+            parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $6->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
             $$ = $6;
         }
     }
@@ -815,7 +815,7 @@
         parseContext.rValueErrorCheck($2.loc, "assign", $3);
         $$ = parseContext.addAssign($2.loc, $2.op, $1, $3);
         if ($$ == 0) {
-            parseContext.assignError($2.loc, "assign", $1->getCompleteString(), $3->getCompleteString());
+            parseContext.assignError($2.loc, "assign", $1->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $3->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
             $$ = $1;
         }
     }
@@ -877,7 +877,7 @@
         parseContext.samplerConstructorLocationCheck($2.loc, ",", $3);
         $$ = parseContext.intermediate.addComma($1, $3, $2.loc);
         if ($$ == 0) {
-            parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(), $3->getCompleteString());
+            parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $3->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
             $$ = $3;
         }
     }
@@ -1290,27 +1290,45 @@
         $$.init($1.loc);
         $$.qualifier.pervertexNV = true;
     }
+    | PERVERTEXEXT {
+        parseContext.globalCheck($1.loc, "pervertexEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
+        $$.init($1.loc);
+        $$.qualifier.pervertexEXT = true;
+    }
     | PERPRIMITIVENV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perprimitiveNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV");
         // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
         if (parseContext.language == EShLangFragment)
             parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
         $$.init($1.loc);
         $$.qualifier.perPrimitiveNV = true;
     }
+    | PERPRIMITIVEEXT {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "perprimitiveEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT");
+        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
+        if (parseContext.language == EShLangFragment)
+            parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT");
+        $$.init($1.loc);
+        $$.qualifier.perPrimitiveNV = true;
+    }
     | PERVIEWNV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perviewNV");
-        parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV");
+        parseContext.requireStage($1.loc, EShLangMesh, "perviewNV");
         $$.init($1.loc);
         $$.qualifier.perViewNV = true;
     }
     | PERTASKNV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "taskNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV");
         $$.init($1.loc);
         $$.qualifier.perTaskNV = true;
     }
@@ -1461,7 +1479,7 @@
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
         parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared");
         $$.init($1.loc);
         $$.qualifier.storage = EvqShared;
     }
@@ -1648,6 +1666,13 @@
         parseContext.unimplemented($1.loc, "subroutine");
         $$.init($1.loc);
     }
+    | TASKPAYLOADWORKGROUPEXT {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "taskPayloadSharedEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT  ");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqtaskPayloadSharedEXT;
+    }
 GLSLANG_WEB_EXCLUDE_OFF
     ;
 
@@ -3718,7 +3743,7 @@
     }
       RIGHT_BRACE {
         if ($3 && $3->getAsAggregate())
-            $3->getAsAggregate()->setOperator(EOpSequence);
+            $3->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
         $$ = $3;
     }
     ;
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index df53eb5..35242f2 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -151,7 +151,7 @@
 
 %parse-param {glslang::TParseContext* pParseContext}
 %lex-param {parseContext}
-%pure-parser  // enable thread safety
+%define api.pure  // enable thread safety
 %expect 1     // One shift reduce conflict because of if | else
 
 %token <lex> CONST BOOL INT UINT FLOAT
@@ -315,7 +315,7 @@
 %token <lex> PATCH SAMPLE NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
-%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV PERPRIMITIVEEXT TASKPAYLOADWORKGROUPEXT
 %token <lex> PRECISE
 
 
@@ -798,7 +798,7 @@
         parseContext.rValueErrorCheck($5.loc, ":", $6);
         $$ = parseContext.intermediate.addSelection($1, $4, $6, $2.loc);
         if ($$ == 0) {
-            parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(), $6->getCompleteString());
+            parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $6->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
             $$ = $6;
         }
     }
@@ -815,7 +815,7 @@
         parseContext.rValueErrorCheck($2.loc, "assign", $3);
         $$ = parseContext.addAssign($2.loc, $2.op, $1, $3);
         if ($$ == 0) {
-            parseContext.assignError($2.loc, "assign", $1->getCompleteString(), $3->getCompleteString());
+            parseContext.assignError($2.loc, "assign", $1->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $3->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
             $$ = $1;
         }
     }
@@ -877,7 +877,7 @@
         parseContext.samplerConstructorLocationCheck($2.loc, ",", $3);
         $$ = parseContext.intermediate.addComma($1, $3, $2.loc);
         if ($$ == 0) {
-            parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(), $3->getCompleteString());
+            parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $3->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
             $$ = $3;
         }
     }
@@ -1290,27 +1290,45 @@
         $$.init($1.loc);
         $$.qualifier.pervertexNV = true;
     }
+    | PERVERTEXEXT {
+        parseContext.globalCheck($1.loc, "pervertexEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
+        $$.init($1.loc);
+        $$.qualifier.pervertexEXT = true;
+    }
     | PERPRIMITIVENV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perprimitiveNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV");
         // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
         if (parseContext.language == EShLangFragment)
             parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
         $$.init($1.loc);
         $$.qualifier.perPrimitiveNV = true;
     }
+    | PERPRIMITIVEEXT {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "perprimitiveEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT");
+        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
+        if (parseContext.language == EShLangFragment)
+            parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT");
+        $$.init($1.loc);
+        $$.qualifier.perPrimitiveNV = true;
+    }
     | PERVIEWNV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perviewNV");
-        parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV");
+        parseContext.requireStage($1.loc, EShLangMesh, "perviewNV");
         $$.init($1.loc);
         $$.qualifier.perViewNV = true;
     }
     | PERTASKNV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "taskNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV");
         $$.init($1.loc);
         $$.qualifier.perTaskNV = true;
     }
@@ -1461,7 +1479,7 @@
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
         parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared");
         $$.init($1.loc);
         $$.qualifier.storage = EvqShared;
     }
@@ -1648,6 +1666,13 @@
         parseContext.unimplemented($1.loc, "subroutine");
         $$.init($1.loc);
     }
+    | TASKPAYLOADWORKGROUPEXT {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "taskPayloadSharedEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT  ");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqtaskPayloadSharedEXT;
+    }
 
     ;
 
@@ -3718,7 +3743,7 @@
     }
       RIGHT_BRACE {
         if ($3 && $3->getAsAggregate())
-            $3->getAsAggregate()->setOperator(EOpSequence);
+            $3->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
         $$ = $3;
     }
     ;
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index 5ba6a6d..7ca3e71 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -571,142 +571,145 @@
   YYSYMBOL_SHADERCALLCOHERENT = 447,       /* SHADERCALLCOHERENT  */
   YYSYMBOL_NOPERSPECTIVE = 448,            /* NOPERSPECTIVE  */
   YYSYMBOL_EXPLICITINTERPAMD = 449,        /* EXPLICITINTERPAMD  */
-  YYSYMBOL_PERVERTEXNV = 450,              /* PERVERTEXNV  */
-  YYSYMBOL_PERPRIMITIVENV = 451,           /* PERPRIMITIVENV  */
-  YYSYMBOL_PERVIEWNV = 452,                /* PERVIEWNV  */
-  YYSYMBOL_PERTASKNV = 453,                /* PERTASKNV  */
-  YYSYMBOL_PRECISE = 454,                  /* PRECISE  */
-  YYSYMBOL_YYACCEPT = 455,                 /* $accept  */
-  YYSYMBOL_variable_identifier = 456,      /* variable_identifier  */
-  YYSYMBOL_primary_expression = 457,       /* primary_expression  */
-  YYSYMBOL_postfix_expression = 458,       /* postfix_expression  */
-  YYSYMBOL_integer_expression = 459,       /* integer_expression  */
-  YYSYMBOL_function_call = 460,            /* function_call  */
-  YYSYMBOL_function_call_or_method = 461,  /* function_call_or_method  */
-  YYSYMBOL_function_call_generic = 462,    /* function_call_generic  */
-  YYSYMBOL_function_call_header_no_parameters = 463, /* function_call_header_no_parameters  */
-  YYSYMBOL_function_call_header_with_parameters = 464, /* function_call_header_with_parameters  */
-  YYSYMBOL_function_call_header = 465,     /* function_call_header  */
-  YYSYMBOL_function_identifier = 466,      /* function_identifier  */
-  YYSYMBOL_unary_expression = 467,         /* unary_expression  */
-  YYSYMBOL_unary_operator = 468,           /* unary_operator  */
-  YYSYMBOL_multiplicative_expression = 469, /* multiplicative_expression  */
-  YYSYMBOL_additive_expression = 470,      /* additive_expression  */
-  YYSYMBOL_shift_expression = 471,         /* shift_expression  */
-  YYSYMBOL_relational_expression = 472,    /* relational_expression  */
-  YYSYMBOL_equality_expression = 473,      /* equality_expression  */
-  YYSYMBOL_and_expression = 474,           /* and_expression  */
-  YYSYMBOL_exclusive_or_expression = 475,  /* exclusive_or_expression  */
-  YYSYMBOL_inclusive_or_expression = 476,  /* inclusive_or_expression  */
-  YYSYMBOL_logical_and_expression = 477,   /* logical_and_expression  */
-  YYSYMBOL_logical_xor_expression = 478,   /* logical_xor_expression  */
-  YYSYMBOL_logical_or_expression = 479,    /* logical_or_expression  */
-  YYSYMBOL_conditional_expression = 480,   /* conditional_expression  */
-  YYSYMBOL_481_1 = 481,                    /* $@1  */
-  YYSYMBOL_assignment_expression = 482,    /* assignment_expression  */
-  YYSYMBOL_assignment_operator = 483,      /* assignment_operator  */
-  YYSYMBOL_expression = 484,               /* expression  */
-  YYSYMBOL_constant_expression = 485,      /* constant_expression  */
-  YYSYMBOL_declaration = 486,              /* declaration  */
-  YYSYMBOL_block_structure = 487,          /* block_structure  */
-  YYSYMBOL_488_2 = 488,                    /* $@2  */
-  YYSYMBOL_identifier_list = 489,          /* identifier_list  */
-  YYSYMBOL_function_prototype = 490,       /* function_prototype  */
-  YYSYMBOL_function_declarator = 491,      /* function_declarator  */
-  YYSYMBOL_function_header_with_parameters = 492, /* function_header_with_parameters  */
-  YYSYMBOL_function_header = 493,          /* function_header  */
-  YYSYMBOL_parameter_declarator = 494,     /* parameter_declarator  */
-  YYSYMBOL_parameter_declaration = 495,    /* parameter_declaration  */
-  YYSYMBOL_parameter_type_specifier = 496, /* parameter_type_specifier  */
-  YYSYMBOL_init_declarator_list = 497,     /* init_declarator_list  */
-  YYSYMBOL_single_declaration = 498,       /* single_declaration  */
-  YYSYMBOL_fully_specified_type = 499,     /* fully_specified_type  */
-  YYSYMBOL_invariant_qualifier = 500,      /* invariant_qualifier  */
-  YYSYMBOL_interpolation_qualifier = 501,  /* interpolation_qualifier  */
-  YYSYMBOL_layout_qualifier = 502,         /* layout_qualifier  */
-  YYSYMBOL_layout_qualifier_id_list = 503, /* layout_qualifier_id_list  */
-  YYSYMBOL_layout_qualifier_id = 504,      /* layout_qualifier_id  */
-  YYSYMBOL_precise_qualifier = 505,        /* precise_qualifier  */
-  YYSYMBOL_type_qualifier = 506,           /* type_qualifier  */
-  YYSYMBOL_single_type_qualifier = 507,    /* single_type_qualifier  */
-  YYSYMBOL_storage_qualifier = 508,        /* storage_qualifier  */
-  YYSYMBOL_non_uniform_qualifier = 509,    /* non_uniform_qualifier  */
-  YYSYMBOL_type_name_list = 510,           /* type_name_list  */
-  YYSYMBOL_type_specifier = 511,           /* type_specifier  */
-  YYSYMBOL_array_specifier = 512,          /* array_specifier  */
-  YYSYMBOL_type_parameter_specifier_opt = 513, /* type_parameter_specifier_opt  */
-  YYSYMBOL_type_parameter_specifier = 514, /* type_parameter_specifier  */
-  YYSYMBOL_type_parameter_specifier_list = 515, /* type_parameter_specifier_list  */
-  YYSYMBOL_type_specifier_nonarray = 516,  /* type_specifier_nonarray  */
-  YYSYMBOL_precision_qualifier = 517,      /* precision_qualifier  */
-  YYSYMBOL_struct_specifier = 518,         /* struct_specifier  */
-  YYSYMBOL_519_3 = 519,                    /* $@3  */
-  YYSYMBOL_520_4 = 520,                    /* $@4  */
-  YYSYMBOL_struct_declaration_list = 521,  /* struct_declaration_list  */
-  YYSYMBOL_struct_declaration = 522,       /* struct_declaration  */
-  YYSYMBOL_struct_declarator_list = 523,   /* struct_declarator_list  */
-  YYSYMBOL_struct_declarator = 524,        /* struct_declarator  */
-  YYSYMBOL_initializer = 525,              /* initializer  */
-  YYSYMBOL_initializer_list = 526,         /* initializer_list  */
-  YYSYMBOL_declaration_statement = 527,    /* declaration_statement  */
-  YYSYMBOL_statement = 528,                /* statement  */
-  YYSYMBOL_simple_statement = 529,         /* simple_statement  */
-  YYSYMBOL_demote_statement = 530,         /* demote_statement  */
-  YYSYMBOL_compound_statement = 531,       /* compound_statement  */
-  YYSYMBOL_532_5 = 532,                    /* $@5  */
-  YYSYMBOL_533_6 = 533,                    /* $@6  */
-  YYSYMBOL_statement_no_new_scope = 534,   /* statement_no_new_scope  */
-  YYSYMBOL_statement_scoped = 535,         /* statement_scoped  */
-  YYSYMBOL_536_7 = 536,                    /* $@7  */
-  YYSYMBOL_537_8 = 537,                    /* $@8  */
-  YYSYMBOL_compound_statement_no_new_scope = 538, /* compound_statement_no_new_scope  */
-  YYSYMBOL_statement_list = 539,           /* statement_list  */
-  YYSYMBOL_expression_statement = 540,     /* expression_statement  */
-  YYSYMBOL_selection_statement = 541,      /* selection_statement  */
-  YYSYMBOL_selection_statement_nonattributed = 542, /* selection_statement_nonattributed  */
-  YYSYMBOL_selection_rest_statement = 543, /* selection_rest_statement  */
-  YYSYMBOL_condition = 544,                /* condition  */
-  YYSYMBOL_switch_statement = 545,         /* switch_statement  */
-  YYSYMBOL_switch_statement_nonattributed = 546, /* switch_statement_nonattributed  */
-  YYSYMBOL_547_9 = 547,                    /* $@9  */
-  YYSYMBOL_switch_statement_list = 548,    /* switch_statement_list  */
-  YYSYMBOL_case_label = 549,               /* case_label  */
-  YYSYMBOL_iteration_statement = 550,      /* iteration_statement  */
-  YYSYMBOL_iteration_statement_nonattributed = 551, /* iteration_statement_nonattributed  */
-  YYSYMBOL_552_10 = 552,                   /* $@10  */
-  YYSYMBOL_553_11 = 553,                   /* $@11  */
-  YYSYMBOL_554_12 = 554,                   /* $@12  */
-  YYSYMBOL_for_init_statement = 555,       /* for_init_statement  */
-  YYSYMBOL_conditionopt = 556,             /* conditionopt  */
-  YYSYMBOL_for_rest_statement = 557,       /* for_rest_statement  */
-  YYSYMBOL_jump_statement = 558,           /* jump_statement  */
-  YYSYMBOL_translation_unit = 559,         /* translation_unit  */
-  YYSYMBOL_external_declaration = 560,     /* external_declaration  */
-  YYSYMBOL_function_definition = 561,      /* function_definition  */
-  YYSYMBOL_562_13 = 562,                   /* $@13  */
-  YYSYMBOL_attribute = 563,                /* attribute  */
-  YYSYMBOL_attribute_list = 564,           /* attribute_list  */
-  YYSYMBOL_single_attribute = 565,         /* single_attribute  */
-  YYSYMBOL_spirv_requirements_list = 566,  /* spirv_requirements_list  */
-  YYSYMBOL_spirv_requirements_parameter = 567, /* spirv_requirements_parameter  */
-  YYSYMBOL_spirv_extension_list = 568,     /* spirv_extension_list  */
-  YYSYMBOL_spirv_capability_list = 569,    /* spirv_capability_list  */
-  YYSYMBOL_spirv_execution_mode_qualifier = 570, /* spirv_execution_mode_qualifier  */
-  YYSYMBOL_spirv_execution_mode_parameter_list = 571, /* spirv_execution_mode_parameter_list  */
-  YYSYMBOL_spirv_execution_mode_parameter = 572, /* spirv_execution_mode_parameter  */
-  YYSYMBOL_spirv_execution_mode_id_parameter_list = 573, /* spirv_execution_mode_id_parameter_list  */
-  YYSYMBOL_spirv_storage_class_qualifier = 574, /* spirv_storage_class_qualifier  */
-  YYSYMBOL_spirv_decorate_qualifier = 575, /* spirv_decorate_qualifier  */
-  YYSYMBOL_spirv_decorate_parameter_list = 576, /* spirv_decorate_parameter_list  */
-  YYSYMBOL_spirv_decorate_parameter = 577, /* spirv_decorate_parameter  */
-  YYSYMBOL_spirv_decorate_id_parameter_list = 578, /* spirv_decorate_id_parameter_list  */
-  YYSYMBOL_spirv_decorate_string_parameter_list = 579, /* spirv_decorate_string_parameter_list  */
-  YYSYMBOL_spirv_type_specifier = 580,     /* spirv_type_specifier  */
-  YYSYMBOL_spirv_type_parameter_list = 581, /* spirv_type_parameter_list  */
-  YYSYMBOL_spirv_type_parameter = 582,     /* spirv_type_parameter  */
-  YYSYMBOL_spirv_instruction_qualifier = 583, /* spirv_instruction_qualifier  */
-  YYSYMBOL_spirv_instruction_qualifier_list = 584, /* spirv_instruction_qualifier_list  */
-  YYSYMBOL_spirv_instruction_qualifier_id = 585 /* spirv_instruction_qualifier_id  */
+  YYSYMBOL_PERVERTEXEXT = 450,             /* PERVERTEXEXT  */
+  YYSYMBOL_PERVERTEXNV = 451,              /* PERVERTEXNV  */
+  YYSYMBOL_PERPRIMITIVENV = 452,           /* PERPRIMITIVENV  */
+  YYSYMBOL_PERVIEWNV = 453,                /* PERVIEWNV  */
+  YYSYMBOL_PERTASKNV = 454,                /* PERTASKNV  */
+  YYSYMBOL_PERPRIMITIVEEXT = 455,          /* PERPRIMITIVEEXT  */
+  YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 456,  /* TASKPAYLOADWORKGROUPEXT  */
+  YYSYMBOL_PRECISE = 457,                  /* PRECISE  */
+  YYSYMBOL_YYACCEPT = 458,                 /* $accept  */
+  YYSYMBOL_variable_identifier = 459,      /* variable_identifier  */
+  YYSYMBOL_primary_expression = 460,       /* primary_expression  */
+  YYSYMBOL_postfix_expression = 461,       /* postfix_expression  */
+  YYSYMBOL_integer_expression = 462,       /* integer_expression  */
+  YYSYMBOL_function_call = 463,            /* function_call  */
+  YYSYMBOL_function_call_or_method = 464,  /* function_call_or_method  */
+  YYSYMBOL_function_call_generic = 465,    /* function_call_generic  */
+  YYSYMBOL_function_call_header_no_parameters = 466, /* function_call_header_no_parameters  */
+  YYSYMBOL_function_call_header_with_parameters = 467, /* function_call_header_with_parameters  */
+  YYSYMBOL_function_call_header = 468,     /* function_call_header  */
+  YYSYMBOL_function_identifier = 469,      /* function_identifier  */
+  YYSYMBOL_unary_expression = 470,         /* unary_expression  */
+  YYSYMBOL_unary_operator = 471,           /* unary_operator  */
+  YYSYMBOL_multiplicative_expression = 472, /* multiplicative_expression  */
+  YYSYMBOL_additive_expression = 473,      /* additive_expression  */
+  YYSYMBOL_shift_expression = 474,         /* shift_expression  */
+  YYSYMBOL_relational_expression = 475,    /* relational_expression  */
+  YYSYMBOL_equality_expression = 476,      /* equality_expression  */
+  YYSYMBOL_and_expression = 477,           /* and_expression  */
+  YYSYMBOL_exclusive_or_expression = 478,  /* exclusive_or_expression  */
+  YYSYMBOL_inclusive_or_expression = 479,  /* inclusive_or_expression  */
+  YYSYMBOL_logical_and_expression = 480,   /* logical_and_expression  */
+  YYSYMBOL_logical_xor_expression = 481,   /* logical_xor_expression  */
+  YYSYMBOL_logical_or_expression = 482,    /* logical_or_expression  */
+  YYSYMBOL_conditional_expression = 483,   /* conditional_expression  */
+  YYSYMBOL_484_1 = 484,                    /* $@1  */
+  YYSYMBOL_assignment_expression = 485,    /* assignment_expression  */
+  YYSYMBOL_assignment_operator = 486,      /* assignment_operator  */
+  YYSYMBOL_expression = 487,               /* expression  */
+  YYSYMBOL_constant_expression = 488,      /* constant_expression  */
+  YYSYMBOL_declaration = 489,              /* declaration  */
+  YYSYMBOL_block_structure = 490,          /* block_structure  */
+  YYSYMBOL_491_2 = 491,                    /* $@2  */
+  YYSYMBOL_identifier_list = 492,          /* identifier_list  */
+  YYSYMBOL_function_prototype = 493,       /* function_prototype  */
+  YYSYMBOL_function_declarator = 494,      /* function_declarator  */
+  YYSYMBOL_function_header_with_parameters = 495, /* function_header_with_parameters  */
+  YYSYMBOL_function_header = 496,          /* function_header  */
+  YYSYMBOL_parameter_declarator = 497,     /* parameter_declarator  */
+  YYSYMBOL_parameter_declaration = 498,    /* parameter_declaration  */
+  YYSYMBOL_parameter_type_specifier = 499, /* parameter_type_specifier  */
+  YYSYMBOL_init_declarator_list = 500,     /* init_declarator_list  */
+  YYSYMBOL_single_declaration = 501,       /* single_declaration  */
+  YYSYMBOL_fully_specified_type = 502,     /* fully_specified_type  */
+  YYSYMBOL_invariant_qualifier = 503,      /* invariant_qualifier  */
+  YYSYMBOL_interpolation_qualifier = 504,  /* interpolation_qualifier  */
+  YYSYMBOL_layout_qualifier = 505,         /* layout_qualifier  */
+  YYSYMBOL_layout_qualifier_id_list = 506, /* layout_qualifier_id_list  */
+  YYSYMBOL_layout_qualifier_id = 507,      /* layout_qualifier_id  */
+  YYSYMBOL_precise_qualifier = 508,        /* precise_qualifier  */
+  YYSYMBOL_type_qualifier = 509,           /* type_qualifier  */
+  YYSYMBOL_single_type_qualifier = 510,    /* single_type_qualifier  */
+  YYSYMBOL_storage_qualifier = 511,        /* storage_qualifier  */
+  YYSYMBOL_non_uniform_qualifier = 512,    /* non_uniform_qualifier  */
+  YYSYMBOL_type_name_list = 513,           /* type_name_list  */
+  YYSYMBOL_type_specifier = 514,           /* type_specifier  */
+  YYSYMBOL_array_specifier = 515,          /* array_specifier  */
+  YYSYMBOL_type_parameter_specifier_opt = 516, /* type_parameter_specifier_opt  */
+  YYSYMBOL_type_parameter_specifier = 517, /* type_parameter_specifier  */
+  YYSYMBOL_type_parameter_specifier_list = 518, /* type_parameter_specifier_list  */
+  YYSYMBOL_type_specifier_nonarray = 519,  /* type_specifier_nonarray  */
+  YYSYMBOL_precision_qualifier = 520,      /* precision_qualifier  */
+  YYSYMBOL_struct_specifier = 521,         /* struct_specifier  */
+  YYSYMBOL_522_3 = 522,                    /* $@3  */
+  YYSYMBOL_523_4 = 523,                    /* $@4  */
+  YYSYMBOL_struct_declaration_list = 524,  /* struct_declaration_list  */
+  YYSYMBOL_struct_declaration = 525,       /* struct_declaration  */
+  YYSYMBOL_struct_declarator_list = 526,   /* struct_declarator_list  */
+  YYSYMBOL_struct_declarator = 527,        /* struct_declarator  */
+  YYSYMBOL_initializer = 528,              /* initializer  */
+  YYSYMBOL_initializer_list = 529,         /* initializer_list  */
+  YYSYMBOL_declaration_statement = 530,    /* declaration_statement  */
+  YYSYMBOL_statement = 531,                /* statement  */
+  YYSYMBOL_simple_statement = 532,         /* simple_statement  */
+  YYSYMBOL_demote_statement = 533,         /* demote_statement  */
+  YYSYMBOL_compound_statement = 534,       /* compound_statement  */
+  YYSYMBOL_535_5 = 535,                    /* $@5  */
+  YYSYMBOL_536_6 = 536,                    /* $@6  */
+  YYSYMBOL_statement_no_new_scope = 537,   /* statement_no_new_scope  */
+  YYSYMBOL_statement_scoped = 538,         /* statement_scoped  */
+  YYSYMBOL_539_7 = 539,                    /* $@7  */
+  YYSYMBOL_540_8 = 540,                    /* $@8  */
+  YYSYMBOL_compound_statement_no_new_scope = 541, /* compound_statement_no_new_scope  */
+  YYSYMBOL_statement_list = 542,           /* statement_list  */
+  YYSYMBOL_expression_statement = 543,     /* expression_statement  */
+  YYSYMBOL_selection_statement = 544,      /* selection_statement  */
+  YYSYMBOL_selection_statement_nonattributed = 545, /* selection_statement_nonattributed  */
+  YYSYMBOL_selection_rest_statement = 546, /* selection_rest_statement  */
+  YYSYMBOL_condition = 547,                /* condition  */
+  YYSYMBOL_switch_statement = 548,         /* switch_statement  */
+  YYSYMBOL_switch_statement_nonattributed = 549, /* switch_statement_nonattributed  */
+  YYSYMBOL_550_9 = 550,                    /* $@9  */
+  YYSYMBOL_switch_statement_list = 551,    /* switch_statement_list  */
+  YYSYMBOL_case_label = 552,               /* case_label  */
+  YYSYMBOL_iteration_statement = 553,      /* iteration_statement  */
+  YYSYMBOL_iteration_statement_nonattributed = 554, /* iteration_statement_nonattributed  */
+  YYSYMBOL_555_10 = 555,                   /* $@10  */
+  YYSYMBOL_556_11 = 556,                   /* $@11  */
+  YYSYMBOL_557_12 = 557,                   /* $@12  */
+  YYSYMBOL_for_init_statement = 558,       /* for_init_statement  */
+  YYSYMBOL_conditionopt = 559,             /* conditionopt  */
+  YYSYMBOL_for_rest_statement = 560,       /* for_rest_statement  */
+  YYSYMBOL_jump_statement = 561,           /* jump_statement  */
+  YYSYMBOL_translation_unit = 562,         /* translation_unit  */
+  YYSYMBOL_external_declaration = 563,     /* external_declaration  */
+  YYSYMBOL_function_definition = 564,      /* function_definition  */
+  YYSYMBOL_565_13 = 565,                   /* $@13  */
+  YYSYMBOL_attribute = 566,                /* attribute  */
+  YYSYMBOL_attribute_list = 567,           /* attribute_list  */
+  YYSYMBOL_single_attribute = 568,         /* single_attribute  */
+  YYSYMBOL_spirv_requirements_list = 569,  /* spirv_requirements_list  */
+  YYSYMBOL_spirv_requirements_parameter = 570, /* spirv_requirements_parameter  */
+  YYSYMBOL_spirv_extension_list = 571,     /* spirv_extension_list  */
+  YYSYMBOL_spirv_capability_list = 572,    /* spirv_capability_list  */
+  YYSYMBOL_spirv_execution_mode_qualifier = 573, /* spirv_execution_mode_qualifier  */
+  YYSYMBOL_spirv_execution_mode_parameter_list = 574, /* spirv_execution_mode_parameter_list  */
+  YYSYMBOL_spirv_execution_mode_parameter = 575, /* spirv_execution_mode_parameter  */
+  YYSYMBOL_spirv_execution_mode_id_parameter_list = 576, /* spirv_execution_mode_id_parameter_list  */
+  YYSYMBOL_spirv_storage_class_qualifier = 577, /* spirv_storage_class_qualifier  */
+  YYSYMBOL_spirv_decorate_qualifier = 578, /* spirv_decorate_qualifier  */
+  YYSYMBOL_spirv_decorate_parameter_list = 579, /* spirv_decorate_parameter_list  */
+  YYSYMBOL_spirv_decorate_parameter = 580, /* spirv_decorate_parameter  */
+  YYSYMBOL_spirv_decorate_id_parameter_list = 581, /* spirv_decorate_id_parameter_list  */
+  YYSYMBOL_spirv_decorate_string_parameter_list = 582, /* spirv_decorate_string_parameter_list  */
+  YYSYMBOL_spirv_type_specifier = 583,     /* spirv_type_specifier  */
+  YYSYMBOL_spirv_type_parameter_list = 584, /* spirv_type_parameter_list  */
+  YYSYMBOL_spirv_type_parameter = 585,     /* spirv_type_parameter  */
+  YYSYMBOL_spirv_instruction_qualifier = 586, /* spirv_instruction_qualifier  */
+  YYSYMBOL_spirv_instruction_qualifier_list = 587, /* spirv_instruction_qualifier_list  */
+  YYSYMBOL_spirv_instruction_qualifier_id = 588 /* spirv_instruction_qualifier_id  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -728,7 +731,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 732 "MachineIndependent/glslang_tab.cpp"
+#line 735 "MachineIndependent/glslang_tab.cpp"
 
 
 #ifdef short
@@ -1032,21 +1035,21 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  442
+#define YYFINAL  445
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   12452
+#define YYLAST   12503
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  455
+#define YYNTOKENS  458
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  131
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  683
+#define YYNRULES  686
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  929
+#define YYNSTATES  932
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   709
+#define YYMAXUTOK   712
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1130,7 +1133,8 @@
      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
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457
 };
 
 #if YYDEBUG
@@ -1151,61 +1155,61 @@
      982,   988,   994,  1004,  1007,  1014,  1022,  1042,  1065,  1080,
     1105,  1116,  1126,  1136,  1146,  1155,  1158,  1162,  1166,  1171,
     1179,  1186,  1191,  1196,  1201,  1210,  1220,  1247,  1256,  1263,
-    1271,  1278,  1285,  1293,  1303,  1310,  1321,  1327,  1330,  1337,
-    1341,  1345,  1354,  1364,  1367,  1378,  1381,  1384,  1388,  1392,
-    1397,  1401,  1404,  1409,  1413,  1418,  1427,  1431,  1436,  1442,
-    1448,  1455,  1460,  1468,  1474,  1486,  1500,  1506,  1511,  1519,
-    1527,  1535,  1543,  1551,  1559,  1567,  1575,  1582,  1589,  1593,
-    1598,  1603,  1608,  1613,  1618,  1623,  1627,  1631,  1635,  1639,
-    1645,  1656,  1663,  1666,  1675,  1680,  1690,  1695,  1703,  1707,
-    1717,  1720,  1726,  1732,  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,  1894,  1901,  1906,  1911,  1916,  1921,
-    1926,  1931,  1936,  1941,  1946,  1951,  1956,  1964,  1972,  1980,
-    1986,  1992,  1998,  2004,  2010,  2016,  2022,  2028,  2034,  2040,
-    2046,  2052,  2058,  2064,  2070,  2076,  2082,  2088,  2094,  2100,
-    2106,  2112,  2118,  2124,  2130,  2136,  2142,  2148,  2154,  2160,
-    2166,  2172,  2178,  2186,  2194,  2202,  2210,  2218,  2226,  2234,
-    2242,  2250,  2258,  2266,  2274,  2280,  2286,  2292,  2298,  2304,
-    2310,  2316,  2322,  2328,  2334,  2340,  2346,  2352,  2358,  2364,
-    2370,  2376,  2382,  2388,  2394,  2400,  2406,  2412,  2418,  2424,
-    2430,  2436,  2442,  2448,  2454,  2460,  2466,  2472,  2478,  2484,
-    2490,  2494,  2498,  2502,  2507,  2513,  2518,  2523,  2528,  2533,
-    2538,  2543,  2549,  2554,  2559,  2564,  2569,  2574,  2580,  2586,
-    2592,  2598,  2604,  2610,  2616,  2622,  2628,  2634,  2640,  2646,
-    2652,  2658,  2663,  2668,  2673,  2678,  2683,  2688,  2694,  2699,
-    2704,  2709,  2714,  2719,  2724,  2729,  2735,  2740,  2745,  2750,
-    2755,  2760,  2765,  2770,  2775,  2780,  2785,  2790,  2795,  2800,
-    2805,  2811,  2816,  2821,  2827,  2833,  2838,  2843,  2848,  2854,
-    2859,  2864,  2869,  2875,  2880,  2885,  2890,  2896,  2901,  2906,
-    2911,  2917,  2923,  2929,  2935,  2940,  2946,  2952,  2958,  2963,
-    2968,  2973,  2978,  2983,  2989,  2994,  2999,  3004,  3010,  3015,
-    3020,  3025,  3031,  3036,  3041,  3046,  3052,  3057,  3062,  3067,
-    3073,  3078,  3083,  3088,  3094,  3099,  3104,  3109,  3115,  3120,
-    3125,  3130,  3136,  3141,  3146,  3151,  3157,  3162,  3167,  3172,
-    3178,  3183,  3188,  3193,  3199,  3204,  3209,  3214,  3220,  3225,
-    3230,  3235,  3241,  3246,  3251,  3256,  3262,  3267,  3272,  3277,
-    3283,  3288,  3293,  3298,  3303,  3308,  3313,  3318,  3323,  3328,
-    3333,  3338,  3343,  3348,  3353,  3358,  3363,  3368,  3373,  3378,
-    3383,  3388,  3393,  3398,  3403,  3409,  3415,  3421,  3427,  3434,
-    3441,  3447,  3453,  3459,  3465,  3471,  3477,  3483,  3488,  3493,
-    3509,  3514,  3519,  3527,  3527,  3538,  3538,  3548,  3551,  3564,
-    3586,  3613,  3617,  3623,  3628,  3639,  3643,  3649,  3655,  3666,
-    3669,  3676,  3680,  3681,  3687,  3688,  3689,  3690,  3691,  3692,
-    3693,  3695,  3701,  3710,  3711,  3715,  3711,  3727,  3728,  3732,
-    3732,  3739,  3739,  3753,  3756,  3764,  3772,  3783,  3784,  3788,
-    3792,  3800,  3807,  3811,  3819,  3823,  3836,  3840,  3848,  3848,
-    3868,  3871,  3877,  3889,  3901,  3905,  3913,  3913,  3928,  3928,
-    3946,  3946,  3967,  3970,  3976,  3979,  3985,  3989,  3996,  4001,
-    4006,  4013,  4016,  4020,  4025,  4029,  4039,  4043,  4052,  4055,
-    4059,  4068,  4068,  4110,  4115,  4118,  4123,  4126,  4133,  4136,
-    4141,  4144,  4149,  4152,  4157,  4160,  4165,  4169,  4174,  4178,
-    4183,  4187,  4194,  4197,  4202,  4205,  4208,  4211,  4214,  4219,
-    4228,  4239,  4244,  4252,  4256,  4261,  4265,  4270,  4274,  4279,
-    4283,  4290,  4293,  4298,  4301,  4304,  4307,  4312,  4320,  4330,
-    4334,  4339,  4343,  4348,  4352,  4359,  4362,  4367,  4372,  4375,
-    4381,  4384,  4389,  4392
+    1271,  1278,  1285,  1293,  1301,  1311,  1321,  1328,  1339,  1345,
+    1348,  1355,  1359,  1363,  1372,  1382,  1385,  1396,  1399,  1402,
+    1406,  1410,  1415,  1419,  1422,  1427,  1431,  1436,  1445,  1449,
+    1454,  1460,  1466,  1473,  1478,  1486,  1492,  1504,  1518,  1524,
+    1529,  1537,  1545,  1553,  1561,  1569,  1577,  1585,  1593,  1600,
+    1607,  1611,  1616,  1621,  1626,  1631,  1636,  1641,  1645,  1649,
+    1653,  1657,  1663,  1669,  1681,  1688,  1691,  1700,  1705,  1715,
+    1720,  1728,  1732,  1742,  1745,  1751,  1757,  1764,  1774,  1778,
+    1782,  1786,  1791,  1795,  1800,  1805,  1810,  1815,  1820,  1825,
+    1830,  1835,  1840,  1846,  1852,  1858,  1863,  1868,  1873,  1878,
+    1883,  1888,  1893,  1898,  1903,  1908,  1913,  1919,  1926,  1931,
+    1936,  1941,  1946,  1951,  1956,  1961,  1966,  1971,  1976,  1981,
+    1989,  1997,  2005,  2011,  2017,  2023,  2029,  2035,  2041,  2047,
+    2053,  2059,  2065,  2071,  2077,  2083,  2089,  2095,  2101,  2107,
+    2113,  2119,  2125,  2131,  2137,  2143,  2149,  2155,  2161,  2167,
+    2173,  2179,  2185,  2191,  2197,  2203,  2211,  2219,  2227,  2235,
+    2243,  2251,  2259,  2267,  2275,  2283,  2291,  2299,  2305,  2311,
+    2317,  2323,  2329,  2335,  2341,  2347,  2353,  2359,  2365,  2371,
+    2377,  2383,  2389,  2395,  2401,  2407,  2413,  2419,  2425,  2431,
+    2437,  2443,  2449,  2455,  2461,  2467,  2473,  2479,  2485,  2491,
+    2497,  2503,  2509,  2515,  2519,  2523,  2527,  2532,  2538,  2543,
+    2548,  2553,  2558,  2563,  2568,  2574,  2579,  2584,  2589,  2594,
+    2599,  2605,  2611,  2617,  2623,  2629,  2635,  2641,  2647,  2653,
+    2659,  2665,  2671,  2677,  2683,  2688,  2693,  2698,  2703,  2708,
+    2713,  2719,  2724,  2729,  2734,  2739,  2744,  2749,  2754,  2760,
+    2765,  2770,  2775,  2780,  2785,  2790,  2795,  2800,  2805,  2810,
+    2815,  2820,  2825,  2830,  2836,  2841,  2846,  2852,  2858,  2863,
+    2868,  2873,  2879,  2884,  2889,  2894,  2900,  2905,  2910,  2915,
+    2921,  2926,  2931,  2936,  2942,  2948,  2954,  2960,  2965,  2971,
+    2977,  2983,  2988,  2993,  2998,  3003,  3008,  3014,  3019,  3024,
+    3029,  3035,  3040,  3045,  3050,  3056,  3061,  3066,  3071,  3077,
+    3082,  3087,  3092,  3098,  3103,  3108,  3113,  3119,  3124,  3129,
+    3134,  3140,  3145,  3150,  3155,  3161,  3166,  3171,  3176,  3182,
+    3187,  3192,  3197,  3203,  3208,  3213,  3218,  3224,  3229,  3234,
+    3239,  3245,  3250,  3255,  3260,  3266,  3271,  3276,  3281,  3287,
+    3292,  3297,  3302,  3308,  3313,  3318,  3323,  3328,  3333,  3338,
+    3343,  3348,  3353,  3358,  3363,  3368,  3373,  3378,  3383,  3388,
+    3393,  3398,  3403,  3408,  3413,  3418,  3423,  3428,  3434,  3440,
+    3446,  3452,  3459,  3466,  3472,  3478,  3484,  3490,  3496,  3502,
+    3508,  3513,  3518,  3534,  3539,  3544,  3552,  3552,  3563,  3563,
+    3573,  3576,  3589,  3611,  3638,  3642,  3648,  3653,  3664,  3668,
+    3674,  3680,  3691,  3694,  3701,  3705,  3706,  3712,  3713,  3714,
+    3715,  3716,  3717,  3718,  3720,  3726,  3735,  3736,  3740,  3736,
+    3752,  3753,  3757,  3757,  3764,  3764,  3778,  3781,  3789,  3797,
+    3808,  3809,  3813,  3817,  3825,  3832,  3836,  3844,  3848,  3861,
+    3865,  3873,  3873,  3893,  3896,  3902,  3914,  3926,  3930,  3938,
+    3938,  3953,  3953,  3971,  3971,  3992,  3995,  4001,  4004,  4010,
+    4014,  4021,  4026,  4031,  4038,  4041,  4045,  4050,  4054,  4064,
+    4068,  4077,  4080,  4084,  4093,  4093,  4135,  4140,  4143,  4148,
+    4151,  4158,  4161,  4166,  4169,  4174,  4177,  4182,  4185,  4190,
+    4194,  4199,  4203,  4208,  4212,  4219,  4222,  4227,  4230,  4233,
+    4236,  4239,  4244,  4253,  4264,  4269,  4277,  4281,  4286,  4290,
+    4295,  4299,  4304,  4308,  4315,  4318,  4323,  4326,  4329,  4332,
+    4337,  4345,  4355,  4359,  4364,  4368,  4373,  4377,  4384,  4387,
+    4392,  4397,  4400,  4406,  4409,  4414,  4417
 };
 #endif
 
@@ -1319,7 +1323,8 @@
   "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
   "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE",
   "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD",
-  "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "PRECISE",
+  "PERVERTEXEXT", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV",
+  "PERTASKNV", "PERPRIMITIVEEXT", "TASKPAYLOADWORKGROUPEXT", "PRECISE",
   "$accept", "variable_identifier", "primary_expression",
   "postfix_expression", "integer_expression", "function_call",
   "function_call_or_method", "function_call_generic",
@@ -1429,16 +1434,16 @@
      675,   676,   677,   678,   679,   680,   681,   682,   683,   684,
      685,   686,   687,   688,   689,   690,   691,   692,   693,   694,
      695,   696,   697,   698,   699,   700,   701,   702,   703,   704,
-     705,   706,   707,   708,   709
+     705,   706,   707,   708,   709,   710,   711,   712
 };
 #endif
 
-#define YYPACT_NINF (-859)
+#define YYPACT_NINF (-813)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-570)
+#define YYTABLE_NINF (-573)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -1447,99 +1452,100 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    4548,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -312,  -274,  -244,  -212,  -208,
-    -201,  -181,  -169,  -859,  -859,  -194,  -859,  -859,  -859,  -859,
-    -859,  -285,  -859,  -859,  -859,  -859,  -859,  -317,  -859,  -859,
-    -859,  -859,  -859,  -859,  -132,   -73,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -329,   -70,
-    -158,  -145,  7712,  -221,  -859,  -164,  -859,  -859,  -859,  -859,
-    5452,  -859,  -859,  -859,  -859,   -68,  -859,  -859,   932,  -859,
-    -859,  7712,   -55,  -859,  -859,  -859,  5904,   -80,  -154,  -150,
-    -142,  -135,  -130,   -80,  -129,   -79, 12060,  -859,   -45,  -354,
-     -76,  -859,  -308,  -859,   -43,   -40,  7712,  -859,  -859,  -859,
-    7712,   -72,   -71,  -859,  -265,  -859,  -257,  -859,  -859, 10761,
-     -39,  -859,  -859,  -859,   -35,   -69,  7712,  -859,   -42,   -38,
-     -37,  -859,  -302,  -859,  -235,   -32,   -33,   -28,   -27,  -217,
-     -26,   -23,   -22,   -21,   -20,   -16,  -216,   -29,   -15,   -31,
-    -303,  -859,   -13,  7712,  -859,   -14,  -859,  -214,  -859,  -859,
-    -205,  9029,  -859,  -279,  1384,  -859,  -859,  -859,  -859,  -859,
-     -39,  -299,  -859,  9462,  -275,  -859,   -34,  -859,  -137, 10761,
-   10761,  -859, 10761,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -248,  -859,  -859,  -859,    -3,  -203, 11194,    -1,
-    -859, 10761,  -859,  -859,  -310,     3,   -40,     1,  -859,  -309,
-     -80,  -859,   -30,  -859,  -319,     5,  -128, 10761,  -124,  -859,
-    -157,  -122, 10761,  -120,    10,  -118,   -80,  -859, 11627,  -859,
-    -116, 10761,     7,   -79,  -859,  7712,   -25,  6356,  -859,  7712,
-   10761,  -859,  -354,  -859,   -19,  -859,  -859,   -78,  -263,   -94,
-    -298,   -52,   -18,    -8,   -12,    29,    28,  -301,    15,  9895,
-    -859,    16,  -859,  -859,    19,    12,    17,  -859,    20,    23,
-      18, 10328,    24, 10761,    21,    22,    25,    27,    30,  -215,
-    -859,  -859,  -117,  -859,   -70,    26,    34,  -859,  -859,  -859,
-    -859,  -859,  1836,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  5000,     3,  9462,  -264,  8163,  -859,  -859,  9462,
-    7712,  -859,   -11,  -859,  -859,  -859,  -195,  -859,  -859, 10761,
-      -6,  -859,  -859, 10761,    37,  -859,  -859,  -859, 10761,  -859,
-    -859,  -859,  -322,  -859,  -859,  -192,    35,  -859,  -859,  -859,
-    -859,  -859,  -859,  -179,  -859,  -178,  -859,  -859,  -177,    32,
-    -859,  -859,  -859,  -859,  -175,  -859,  -174,  -859,  -167,    36,
-    -859,  -166,    38,  -165,    35,  -859,  -163,  -859,    45,    46,
-    -859,  -859,   -25,   -39,  -115,  -859,  -859,  -859,  6808,  -859,
-    -859,  -859, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761,
-   10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761,
-   10761,  -859,  -859,  -859,    51,  -859,  2288,  -859,  -859,  -859,
-    2288,  -859, 10761,  -859,  -859,   -88, 10761,   -63,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859, 10761, 10761,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  9462,  -859,  -859,  -108,  -859,  7260,  -859,
-    -859,    52,    53,  -859,  -859,  -859,  -859,  -859,  -138,  -136,
-    -859,  -304,  -859,  -319,  -859,  -319,  -859, 10761, 10761,  -859,
-    -157,  -859,  -157,  -859, 10761, 10761,  -859,    65,    10,  -859,
-   11627,  -859, 10761,  -859,  -859,   -86,     3,   -25,  -859,  -859,
-    -859,  -859,  -859,   -78,   -78,  -263,  -263,   -94,   -94,   -94,
-     -94,  -298,  -298,   -52,   -18,    -8,   -12,    29,    28, 10761,
-    -859,  2288,  4096,    31,  3644,  -156,  -859,  -155,  -859,  -859,
-    -859,  -859,  -859,  8596,  -859,  -859,  -859,    66,  -859,    39,
-    -859,  -153,  -859,  -151,  -859,  -148,  -859,  -146,  -859,  -144,
-    -143,  -859,  -859,  -859,   -61,    64,    53,    40,    72,    74,
-    -859,  -859,  4096,    75,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859, 10761,  -859,    71,  2740, 10761,
-    -859,    73,    81,    41,    80,  3192,  -859,    83,  -859,  9462,
-    -859,  -859,  -859,  -141, 10761,  2740,    75,  -859,  -859,  2288,
-    -859,    78,    53,  -859,  -859,  2288,    86,  -859,  -859
+    4575,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -300,  -272,  -219,  -123,  -120,
+    -118,  -105,   -87,  -813,  -813,  -317,  -813,  -813,  -813,  -813,
+    -813,   -62,  -813,  -813,  -813,  -813,  -813,  -324,  -813,  -813,
+    -813,  -813,  -813,  -813,   -76,   -64,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -319,  -260,  -133,  -174,  7760,  -191,  -813,  -166,  -813,
+    -813,  -813,  -813,  5485,  -813,  -813,  -813,  -813,   -61,  -813,
+    -813,   935,  -813,  -813,  7760,   -39,  -813,  -813,  -813,  5940,
+     -50,  -335,  -267,  -162,  -152,  -139,   -50,  -137,   -46, 12111,
+    -813,   -29,  -339,   -43,  -813,  -268,  -813,   -27,    -6,  7760,
+    -813,  -813,  -813,  7760,   -37,   -36,  -813,  -298,  -813,  -237,
+    -813,  -813, 10812,    -5,  -813,  -813,  -813,     1,   -33,  7760,
+    -813,    -4,    -2,    -3,  -813,  -236,  -813,  -227,    -1,     3,
+       4,     5,  -225,     6,    10,    12,    13,    14,    17,  -223,
+       8,    18,    16,  -304,  -813,    21,  7760,  -813,    19,  -813,
+    -222,  -813,  -813,  -207,  9080,  -813,  -247,  1390,  -813,  -813,
+    -813,  -813,  -813,    -5,  -270,  -813,  9513,  -250,  -813,   -22,
+    -813,  -132, 10812, 10812,  -813, 10812,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -265,  -813,  -813,  -813,    25,
+    -204, 11245,    27,  -813, 10812,  -813,  -813,  -314,    30,    -6,
+      33,  -813,  -315,   -50,  -813,    15,  -813,  -325,    32,  -130,
+   10812,  -129,  -813,  -146,  -125, 10812,  -124,    39,  -119,   -50,
+    -813, 11678,  -813,  -115, 10812,    36,   -46,  -813,  7760,    20,
+    6395,  -813,  7760, 10812,  -813,  -339,  -813,    29,  -813,  -813,
+     -47,   -83,   -59,  -288,   -18,   -17,    22,    26,    54,    59,
+    -309,    46,  9946,  -813,    37,  -813,  -813,    50,    56,    58,
+    -813,    72,    74,    65, 10379,    76, 10812,    69,    68,    73,
+      75,    77,  -168,  -813,  -813,   -82,  -813,  -260,    79,    82,
+    -813,  -813,  -813,  -813,  -813,  1845,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  5030,    30,  9513,  -241,  8214,
+    -813,  -813,  9513,  7760,  -813,    52,  -813,  -813,  -813,  -202,
+    -813,  -813, 10812,    55,  -813,  -813, 10812,    85,  -813,  -813,
+    -813, 10812,  -813,  -813,  -813,  -310,  -813,  -813,  -197,    81,
+    -813,  -813,  -813,  -813,  -813,  -813,  -195,  -813,  -194,  -813,
+    -813,  -190,    87,  -813,  -813,  -813,  -813,  -169,  -813,  -167,
+    -813,  -165,    89,  -813,  -158,    90,  -157,    81,  -813,  -156,
+    -813,    91,    97,  -813,  -813,    20,    -5,   -77,  -813,  -813,
+    -813,  6850,  -813,  -813,  -813, 10812, 10812, 10812, 10812, 10812,
+   10812, 10812, 10812, 10812, 10812, 10812, 10812, 10812, 10812, 10812,
+   10812, 10812, 10812, 10812,  -813,  -813,  -813,    96,  -813,  2300,
+    -813,  -813,  -813,  2300,  -813, 10812,  -813,  -813,   -49, 10812,
+     -26,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813, 10812, 10812,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  9513,  -813,  -813,   -31,
+    -813,  7305,  -813,  -813,    98,    95,  -813,  -813,  -813,  -813,
+    -813,  -172,  -134,  -813,  -307,  -813,  -325,  -813,  -325,  -813,
+   10812, 10812,  -813,  -146,  -813,  -146,  -813, 10812, 10812,  -813,
+     104,    39,  -813, 11678,  -813, 10812,  -813,  -813,   -48,    30,
+      20,  -813,  -813,  -813,  -813,  -813,   -47,   -47,   -83,   -83,
+     -59,   -59,   -59,   -59,  -288,  -288,   -18,   -17,    22,    26,
+      54,    59, 10812,  -813,  2300,  4120,    60,  3665,  -155,  -813,
+    -154,  -813,  -813,  -813,  -813,  -813,  8647,  -813,  -813,  -813,
+     106,  -813,   -15,  -813,  -147,  -813,  -145,  -813,  -144,  -813,
+    -143,  -813,  -142,  -140,  -813,  -813,  -813,   -24,   101,    95,
+      71,   107,   110,  -813,  -813,  4120,   109,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813, 10812,  -813,
+     102,  2755, 10812,  -813,   105,   113,    70,   112,  3210,  -813,
+     115,  -813,  9513,  -813,  -813,  -813,  -135, 10812,  2755,   109,
+    -813,  -813,  2300,  -813,   111,    95,  -813,  -813,  2300,   117,
+    -813,  -813
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1547,137 +1553,138 @@
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-       0,   166,   219,   217,   218,   216,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   220,   221,   222,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     345,   346,   347,   348,   349,   350,   351,   371,   372,   373,
-     374,   375,   376,   377,   386,   399,   400,   387,   388,   390,
-     389,   391,   392,   393,   394,   395,   396,   397,   398,   174,
-     175,   245,   246,   244,   247,   254,   255,   252,   253,   250,
-     251,   248,   249,   277,   278,   279,   289,   290,   291,   274,
-     275,   276,   286,   287,   288,   271,   272,   273,   283,   284,
-     285,   268,   269,   270,   280,   281,   282,   256,   257,   258,
-     292,   293,   294,   259,   260,   261,   304,   305,   306,   262,
-     263,   264,   316,   317,   318,   265,   266,   267,   328,   329,
-     330,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   319,
-     320,   321,   322,   323,   324,   325,   326,   327,   331,   332,
-     333,   334,   335,   336,   337,   338,   339,   343,   340,   341,
-     342,   524,   525,   526,   355,   356,   379,   382,   344,   353,
-     354,   370,   352,   401,   402,   405,   406,   407,   409,   410,
-     411,   413,   414,   415,   417,   418,   514,   515,   378,   380,
-     381,   357,   358,   359,   403,   360,   364,   365,   368,   408,
-     412,   416,   361,   362,   366,   367,   404,   363,   369,   448,
-     450,   451,   452,   454,   455,   456,   458,   459,   460,   462,
-     463,   464,   466,   467,   468,   470,   471,   472,   474,   475,
-     476,   478,   479,   480,   482,   483,   484,   486,   487,   488,
-     490,   491,   449,   453,   457,   461,   465,   473,   477,   481,
-     469,   485,   489,   492,   493,   494,   495,   496,   497,   498,
-     499,   500,   501,   502,   503,   504,   505,   506,   507,   508,
-     509,   510,   511,   512,   513,   383,   384,   385,   419,   428,
-     430,   424,   429,   431,   432,   434,   435,   436,   438,   439,
-     440,   442,   443,   444,   446,   447,   420,   421,   422,   433,
-     423,   425,   426,   427,   437,   441,   445,   516,   517,   520,
-     521,   522,   523,   518,   519,     0,     0,     0,     0,     0,
-       0,     0,     0,   164,   165,     0,   620,   137,   530,   531,
-     532,     0,   529,   170,   168,   169,   167,     0,   215,   171,
-     172,   173,   139,   138,     0,   199,   180,   182,   178,   184,
-     186,   181,   183,   179,   185,   187,   176,   177,   201,   188,
-     195,   196,   197,   198,   189,   190,   191,   192,   193,   194,
-     140,   141,   142,   143,   144,   145,   152,   619,     0,   621,
-       0,   114,   113,     0,   125,   130,   159,   158,   156,   160,
-       0,   153,   155,   161,   135,   211,   157,   528,     0,   616,
-     618,     0,     0,   162,   163,   527,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   535,     0,     0,
-       0,    99,     0,    94,     0,   109,     0,   121,   115,   123,
-       0,   124,     0,    97,   131,   102,     0,   154,   136,     0,
-     204,   210,     1,   617,     0,     0,     0,    96,     0,     0,
-       0,   628,     0,   680,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   626,
-       0,   624,     0,     0,   533,   149,   151,     0,   147,   202,
-       0,     0,   100,     0,     0,   622,   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,
-     213,     0,    36,    34,     0,   205,   111,     0,    95,     0,
-       0,   678,     0,   636,     0,     0,     0,     0,     0,   653,
-       0,     0,     0,     0,     0,     0,     0,   673,     0,   651,
-       0,     0,     0,     0,    98,     0,     0,     0,   537,     0,
-       0,   146,     0,   200,     0,   206,    45,    49,    52,    55,
-      60,    63,    65,    67,    69,    71,    73,    75,     0,     0,
-     101,   564,   573,   577,     0,     0,     0,   598,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    45,
-      78,    91,     0,   551,     0,   161,   135,   554,   575,   553,
-     561,   552,     0,   555,   556,   579,   557,   586,   558,   559,
-     594,   560,     0,   119,     0,   127,     0,   545,   134,     0,
-       0,   107,     0,   104,    38,    39,     0,    22,    23,     0,
-       0,    28,    27,     0,   215,    31,    33,    40,     0,   212,
-     112,   682,     0,   683,   629,     0,     0,   681,   648,   644,
-     645,   646,   647,     0,   642,     0,    93,   649,     0,     0,
-     663,   664,   665,   666,     0,   661,     0,   667,     0,     0,
-     669,     0,     0,     0,     2,   677,     0,   675,     0,     0,
-     623,   625,     0,   543,     0,   541,   536,   538,     0,   150,
-     148,   203,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   168,   222,   220,   221,   219,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   223,   224,   225,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     348,   349,   350,   351,   352,   353,   354,   374,   375,   376,
+     377,   378,   379,   380,   389,   402,   403,   390,   391,   393,
+     392,   394,   395,   396,   397,   398,   399,   400,   401,   176,
+     177,   248,   249,   247,   250,   257,   258,   255,   256,   253,
+     254,   251,   252,   280,   281,   282,   292,   293,   294,   277,
+     278,   279,   289,   290,   291,   274,   275,   276,   286,   287,
+     288,   271,   272,   273,   283,   284,   285,   259,   260,   261,
+     295,   296,   297,   262,   263,   264,   307,   308,   309,   265,
+     266,   267,   319,   320,   321,   268,   269,   270,   331,   332,
+     333,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   334,   335,
+     336,   337,   338,   339,   340,   341,   342,   346,   343,   344,
+     345,   527,   528,   529,   358,   359,   382,   385,   347,   356,
+     357,   373,   355,   404,   405,   408,   409,   410,   412,   413,
+     414,   416,   417,   418,   420,   421,   517,   518,   381,   383,
+     384,   360,   361,   362,   406,   363,   367,   368,   371,   411,
+     415,   419,   364,   365,   369,   370,   407,   366,   372,   451,
+     453,   454,   455,   457,   458,   459,   461,   462,   463,   465,
+     466,   467,   469,   470,   471,   473,   474,   475,   477,   478,
+     479,   481,   482,   483,   485,   486,   487,   489,   490,   491,
+     493,   494,   452,   456,   460,   464,   468,   476,   480,   484,
+     472,   488,   492,   495,   496,   497,   498,   499,   500,   501,
+     502,   503,   504,   505,   506,   507,   508,   509,   510,   511,
+     512,   513,   514,   515,   516,   386,   387,   388,   422,   431,
+     433,   427,   432,   434,   435,   437,   438,   439,   441,   442,
+     443,   445,   446,   447,   449,   450,   423,   424,   425,   436,
+     426,   428,   429,   430,   440,   444,   448,   519,   520,   523,
+     524,   525,   526,   521,   522,     0,     0,     0,     0,     0,
+       0,     0,     0,   166,   167,     0,   623,   137,   533,   534,
+     535,     0,   532,   172,   170,   171,   169,     0,   218,   173,
+     174,   175,   139,   138,     0,   201,   182,   184,   180,   186,
+     188,   183,   185,   181,   187,   189,   178,   179,   204,   190,
+     197,   198,   199,   200,   191,   192,   193,   194,   195,   196,
+     140,   141,   143,   142,   144,   146,   147,   145,   203,   154,
+     622,     0,   624,     0,   114,   113,     0,   125,   130,   161,
+     160,   158,   162,     0,   155,   157,   163,   135,   214,   159,
+     531,     0,   619,   621,     0,     0,   164,   165,   530,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    76,   207,   208,     0,   563,     0,   596,   609,   608,
-       0,   600,     0,   612,   610,     0,     0,     0,   593,   613,
-     614,   615,   562,    81,    82,    84,    83,    86,    87,    88,
-      89,    90,    85,    80,     0,     0,   578,   574,   576,   580,
-     587,   595,   129,     0,   548,   549,     0,   133,     0,   108,
-       4,     0,    24,    21,    32,   214,   632,   634,     0,     0,
-     679,     0,   638,     0,   637,     0,   640,     0,     0,   655,
-       0,   654,     0,   657,     0,     0,   659,     0,     0,   674,
-       0,   671,     0,   652,   627,     0,   544,     0,   539,   534,
-      46,    47,    48,    51,    50,    53,    54,    58,    59,    56,
-      57,    61,    62,    64,    66,    68,    70,    72,    74,     0,
-     209,   565,     0,     0,     0,     0,   611,     0,   592,    79,
-      92,   128,   546,     0,   106,    19,   630,     0,   631,     0,
-     643,     0,   650,     0,   662,     0,   668,     0,   670,     0,
-       0,   676,   540,   542,     0,     0,   584,     0,     0,     0,
-     603,   602,   605,   571,   588,   547,   550,   633,   635,   639,
-     641,   656,   658,   660,   672,     0,   566,     0,     0,     0,
-     604,     0,     0,   583,     0,     0,   581,     0,    77,     0,
-     568,   597,   567,     0,   606,     0,   571,   570,   572,   590,
-     585,     0,   607,   601,   582,   591,     0,   599,   589
+     538,     0,     0,     0,    99,     0,    94,     0,   109,     0,
+     121,   115,   123,     0,   124,     0,    97,   131,   102,     0,
+     156,   136,     0,   207,   213,     1,   620,     0,     0,     0,
+      96,     0,     0,     0,   631,     0,   683,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   629,     0,   627,     0,     0,   536,   151,   153,
+       0,   149,   205,     0,     0,   100,     0,     0,   625,   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,   216,     0,    36,    34,     0,   208,   111,
+       0,    95,     0,     0,   681,     0,   639,     0,     0,     0,
+       0,     0,   656,     0,     0,     0,     0,     0,     0,     0,
+     676,     0,   654,     0,     0,     0,     0,    98,     0,     0,
+       0,   540,     0,     0,   148,     0,   202,     0,   209,    45,
+      49,    52,    55,    60,    63,    65,    67,    69,    71,    73,
+      75,     0,     0,   101,   567,   576,   580,     0,     0,     0,
+     601,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    45,    78,    91,     0,   554,     0,   163,   135,
+     557,   578,   556,   564,   555,     0,   558,   559,   582,   560,
+     589,   561,   562,   597,   563,     0,   119,     0,   127,     0,
+     548,   134,     0,     0,   107,     0,   104,    38,    39,     0,
+      22,    23,     0,     0,    28,    27,     0,   218,    31,    33,
+      40,     0,   215,   112,   685,     0,   686,   632,     0,     0,
+     684,   651,   647,   648,   649,   650,     0,   645,     0,    93,
+     652,     0,     0,   666,   667,   668,   669,     0,   664,     0,
+     670,     0,     0,   672,     0,     0,     0,     2,   680,     0,
+     678,     0,     0,   626,   628,     0,   546,     0,   544,   539,
+     541,     0,   152,   150,   206,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    76,   210,   211,     0,   566,     0,
+     599,   612,   611,     0,   603,     0,   615,   613,     0,     0,
+       0,   596,   616,   617,   618,   565,    81,    82,    84,    83,
+      86,    87,    88,    89,    90,    85,    80,     0,     0,   581,
+     577,   579,   583,   590,   598,   129,     0,   551,   552,     0,
+     133,     0,   108,     4,     0,    24,    21,    32,   217,   635,
+     637,     0,     0,   682,     0,   641,     0,   640,     0,   643,
+       0,     0,   658,     0,   657,     0,   660,     0,     0,   662,
+       0,     0,   677,     0,   674,     0,   655,   630,     0,   547,
+       0,   542,   537,    46,    47,    48,    51,    50,    53,    54,
+      58,    59,    56,    57,    61,    62,    64,    66,    68,    70,
+      72,    74,     0,   212,   568,     0,     0,     0,     0,   614,
+       0,   595,    79,    92,   128,   549,     0,   106,    19,   633,
+       0,   634,     0,   646,     0,   653,     0,   665,     0,   671,
+       0,   673,     0,     0,   679,   543,   545,     0,     0,   587,
+       0,     0,     0,   606,   605,   608,   574,   591,   550,   553,
+     636,   638,   642,   644,   659,   661,   663,   675,     0,   569,
+       0,     0,     0,   607,     0,     0,   586,     0,     0,   584,
+       0,    77,     0,   571,   600,   570,     0,   609,     0,   574,
+     573,   575,   593,   588,     0,   610,   604,   585,   594,     0,
+     602,   592
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,  -859,
-    -859,  -859,  -209,  -859,  -418,  -417,  -602,  -421,  -291,  -284,
-    -286,  -283,  -281,  -287,  -859,  -473,  -859,  -490,  -859,  -497,
-    -520,    13,  -859,  -859,  -859,    14,  -394,  -859,  -859,    33,
-      42,    44,  -859,  -859,  -395,  -859,  -859,  -859,  -859,  -121,
-    -859,  -381,  -369,  -859,     9,  -859,     0,  -424,  -859,  -859,
-    -859,  -859,   113,  -859,  -859,  -859,  -545,  -549,  -252,  -365,
-    -617,  -859,  -391,  -618,  -858,  -859,  -450,  -859,  -859,  -459,
-    -458,  -859,  -859,    43,  -721,  -387,  -859,  -173,  -859,  -422,
-    -859,  -170,  -859,  -859,  -859,  -859,  -168,  -859,  -859,  -859,
-    -859,  -859,  -859,  -859,  -859,    67,  -859,  -859,     2,  -859,
-     -97,  -300,  -386,  -859,  -859,  -859,  -326,  -323,  -327,  -859,
-    -859,  -330,  -325,  -328,  -332,  -859,  -331,  -334,  -859,  -390,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -429,  -813,  -381,  -380,  -483,  -383,  -262,  -257,
+    -261,  -258,  -255,  -259,  -813,  -479,  -813,  -492,  -813,  -495,
+    -536,    11,  -813,  -813,  -813,     7,  -388,  -813,  -813,    42,
+      49,    47,  -813,  -813,  -401,  -813,  -813,  -813,  -813,   -96,
+    -813,  -384,  -371,  -813,     9,  -813,     0,  -425,  -813,  -813,
+    -813,  -813,   150,  -813,  -813,  -813,  -546,  -553,  -217,  -338,
+    -607,  -813,  -364,  -619,  -812,  -813,  -421,  -813,  -813,  -428,
+    -430,  -813,  -813,    64,  -718,  -355,  -813,  -141,  -813,  -390,
+    -813,  -138,  -813,  -813,  -813,  -813,  -136,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,    92,  -813,  -813,     2,  -813,
+     -68,  -275,  -456,  -813,  -813,  -813,  -296,  -293,  -301,  -813,
+    -813,  -299,  -295,  -303,  -302,  -813,  -306,  -311,  -813,  -392,
     -530
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   520,   521,   522,   781,   523,   524,   525,   526,   527,
-     528,   529,   609,   531,   577,   578,   579,   580,   581,   582,
-     583,   584,   585,   586,   587,   610,   839,   611,   764,   612,
-     695,   613,   378,   640,   498,   614,   380,   381,   382,   427,
-     428,   429,   383,   384,   385,   386,   387,   388,   477,   478,
-     389,   390,   391,   392,   532,   480,   533,   483,   440,   441,
-     534,   395,   396,   397,   569,   473,   567,   568,   704,   705,
-     638,   776,   617,   618,   619,   620,   621,   736,   875,   911,
-     903,   904,   905,   912,   622,   623,   624,   625,   906,   878,
-     626,   627,   907,   926,   628,   629,   630,   842,   740,   844,
-     882,   901,   902,   631,   398,   399,   400,   424,   632,   470,
-     471,   450,   451,   788,   789,   402,   673,   674,   678,   403,
-     404,   684,   685,   688,   691,   405,   696,   697,   406,   452,
-     453
+      -1,   523,   524,   525,   784,   526,   527,   528,   529,   530,
+     531,   532,   612,   534,   580,   581,   582,   583,   584,   585,
+     586,   587,   588,   589,   590,   613,   842,   614,   767,   615,
+     698,   616,   381,   643,   501,   617,   383,   384,   385,   430,
+     431,   432,   386,   387,   388,   389,   390,   391,   480,   481,
+     392,   393,   394,   395,   535,   483,   536,   486,   443,   444,
+     537,   398,   399,   400,   572,   476,   570,   571,   707,   708,
+     641,   779,   620,   621,   622,   623,   624,   739,   878,   914,
+     906,   907,   908,   915,   625,   626,   627,   628,   909,   881,
+     629,   630,   910,   929,   631,   632,   633,   845,   743,   847,
+     885,   904,   905,   634,   401,   402,   403,   427,   635,   473,
+     474,   453,   454,   791,   792,   405,   676,   677,   681,   406,
+     407,   687,   688,   691,   694,   408,   699,   700,   409,   455,
+     456
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1685,281 +1692,146 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     394,   430,   401,   637,   768,   646,   445,   444,   588,   393,
-     494,   445,   667,   377,   379,   841,   535,   772,   707,   775,
-     446,   437,   777,   466,   708,   446,   786,   677,   667,   668,
-     421,   475,   687,   719,   720,   730,   417,   407,   655,   661,
-     910,   699,   662,   481,   661,   430,   658,   918,   541,   562,
-     709,   482,   481,   563,   542,   476,   422,   910,   659,   634,
-     787,   437,   669,   670,   671,   672,   633,   635,   418,   721,
-     722,   731,   589,   663,   676,   408,   589,   437,   663,   676,
-     590,   647,   648,   639,   492,   676,   481,   589,   676,   328,
-     329,   330,   565,   493,   773,   778,   495,   676,   715,   496,
-     716,   -35,   497,   649,   745,   409,   747,   650,   456,   458,
-     460,   462,   464,   465,   468,   543,   734,   827,   828,   829,
-     830,   544,   843,   753,   754,   755,   756,   757,   758,   759,
-     760,   761,   762,   549,   557,   432,   571,   410,   433,   550,
-     558,   411,   572,   763,   637,   573,   637,   652,   412,   637,
-     665,   574,   782,   653,   664,   780,   851,   415,   790,   707,
-     664,   765,   664,   784,   542,   664,   693,   664,   413,   664,
-     664,   792,   794,   796,   664,   799,   801,   793,   795,   797,
-     414,   800,   802,   803,   806,   809,   565,   811,   565,   804,
-     807,   810,   425,   812,   883,   884,   437,   889,   925,   890,
-     765,   765,   891,   793,   892,   797,   893,   894,   800,   921,
-     804,   426,   807,   812,   856,   765,   858,   419,   857,   642,
-     859,   434,   643,   768,   680,   681,   682,   683,   454,   707,
-     530,   455,   457,   717,   718,   455,   886,   445,   444,   765,
-     459,   817,   766,   455,   818,   845,   852,   461,   853,   847,
-     455,   446,   463,   467,   675,   455,   455,   455,   679,   565,
-     686,   455,   689,   455,   692,   455,   698,   455,   765,   455,
-     817,   846,   576,   872,   849,   850,   420,   862,   677,   816,
-     667,   723,   724,   637,   866,   687,   712,   713,   714,   423,
-     644,   645,   920,   765,   848,   765,   895,   823,   824,   439,
-     825,   826,   831,   832,   447,   449,   469,   768,   474,   479,
-     484,   325,   481,   490,   491,   536,   537,   538,   561,   540,
-     539,   559,   657,   546,   676,   676,   545,   565,   547,   548,
-     551,   676,   676,   552,   553,   554,   555,   676,   576,   676,
-     556,   560,   874,   576,   570,   876,   564,   651,   656,   576,
-     492,   641,   576,   725,   589,   666,   662,   727,   690,   700,
-     703,   576,   726,   637,   728,   729,   711,   732,   737,   741,
-     735,   738,   742,   746,   779,   -36,   739,   743,   748,   783,
-     576,   749,   431,   -34,   750,   876,   751,   -29,   798,   752,
-     438,   393,   805,   791,   808,   813,   814,   565,   394,   393,
-     401,   394,   913,   840,   855,   908,   394,   393,   401,   765,
-     393,   377,   379,   868,   887,   393,   472,   922,   896,   637,
-     448,   888,   898,   899,   879,   897,   431,   486,  -569,   909,
-     431,   915,   914,   591,   833,   393,   919,   927,   916,   393,
-     928,   835,   834,   838,   416,   836,   438,   877,   837,   785,
-     815,   710,   873,   880,   917,   393,   923,   881,   924,   769,
-     900,   446,   770,   488,   771,   443,   701,   485,   487,   861,
-     860,   863,   865,   566,   489,   864,   869,   867,   871,   870,
-       0,     0,   393,     0,   616,     0,     0,   877,     0,     0,
-       0,     0,     0,   615,     0,     0,     0,     0,     0,     0,
-       0,   446,     0,   820,   821,   822,   576,   576,   576,   576,
-     576,   576,   576,   576,   576,   576,   576,   576,   576,   576,
-     576,   576,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   660,     0,
+     397,   433,   404,   448,   640,   591,   771,   382,   448,   396,
+     649,   380,   497,   533,   680,   670,   447,   710,   538,   690,
+     449,   844,   440,   671,   469,   449,   711,   733,   702,   420,
+     775,   670,   778,   664,   418,   780,   665,   712,   789,   658,
+     424,   664,   661,   722,   723,   433,   478,   457,   565,   410,
+     458,   495,   566,   484,   662,   579,   672,   673,   674,   675,
+     496,   421,   440,   734,   650,   651,   425,   666,   636,   638,
+     479,   679,   790,   647,   648,   666,   679,   411,   440,   724,
+     725,   484,   679,   484,   -35,   679,   652,   667,   637,   913,
+     653,   485,   568,   667,   679,   667,   921,   781,   667,   426,
+     667,   592,   667,   667,   592,   660,   913,   667,   642,   748,
+     592,   750,   593,   737,   544,   460,   498,   776,   458,   499,
+     545,   579,   500,   546,   846,   552,   579,   560,   574,   547,
+     412,   553,   579,   561,   575,   579,   459,   461,   463,   465,
+     467,   468,   471,   576,   579,   640,   655,   640,   783,   577,
+     640,   668,   656,   793,   768,   795,   797,   785,   710,   545,
+     799,   796,   798,   579,   787,   435,   800,   696,   436,   854,
+     756,   757,   758,   759,   760,   761,   762,   763,   764,   765,
+     859,   802,   429,   804,   860,   806,   568,   803,   568,   805,
+     766,   807,   809,   812,   814,   886,   887,   440,   810,   813,
+     815,   768,   768,   892,   928,   893,   894,   895,   896,   796,
+     897,   800,   803,   807,   810,   924,   815,   428,   861,   437,
+     462,   768,   862,   458,   645,   771,   413,   646,   710,   414,
+     464,   415,   788,   458,   448,   683,   684,   685,   686,   830,
+     831,   832,   833,   466,   416,   470,   458,   447,   458,   889,
+     848,   449,   678,   682,   850,   458,   458,   689,   692,   568,
+     458,   458,   417,   695,   865,   680,   458,   701,   720,   721,
+     458,   869,   690,   422,   768,   852,   853,   769,   718,   820,
+     719,   819,   821,   670,   640,   423,   823,   824,   825,   579,
+     579,   579,   579,   579,   579,   579,   579,   579,   579,   579,
+     579,   579,   579,   579,   579,   923,   442,   768,   820,   771,
+     849,   875,   328,   329,   330,   726,   727,   715,   716,   717,
+     450,   679,   679,   855,   477,   856,   487,   568,   679,   679,
+     768,   851,   768,   898,   679,   452,   679,   826,   827,   472,
+     828,   829,   482,   834,   835,   325,   484,   877,   493,   494,
+     879,   539,   540,   543,   728,   541,   542,   548,   562,   549,
+     550,   551,   554,   644,   640,   564,   555,   891,   556,   557,
+     558,   579,   579,   559,   563,   654,   659,   573,   579,   579,
+     567,   592,   495,   665,   579,   434,   579,   693,   703,   731,
+     879,   738,   729,   441,   396,   730,   732,   568,   735,   740,
+     669,   397,   396,   404,   397,   706,   911,   916,   382,   397,
+     396,   404,   380,   396,   714,   741,   451,   742,   396,   475,
+     640,   744,   925,   745,   746,   749,   751,   752,   -36,   434,
+     489,   -34,   753,   434,   754,   -29,   755,   782,   396,   794,
+     786,   816,   396,   801,   880,   808,   811,   817,   843,   441,
+     858,   768,   871,   882,   890,   899,   900,   901,   396,   902,
+     912,   449,  -572,   918,   917,   594,   836,   919,   922,   838,
+     930,   931,   837,   839,   841,   491,   569,   840,   490,   713,
+     492,   419,   876,   883,   880,   396,   920,   619,   818,   927,
+     926,   488,   884,   446,   772,   903,   618,   773,   704,   774,
+     866,   449,   864,   863,   874,   870,   868,   873,   867,   872,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   702,     0,   566,     0,   566,
-       0,     0,     0,     0,   393,     0,   393,     0,   393,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   576,   576,
-       0,     0,     0,     0,     0,   576,   576,     0,     0,     0,
-       0,   576,     0,   576,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   616,     0,     0,     0,     0,     0,     0,     0,
-       0,   615,   394,     0,     0,     0,     0,     0,     0,     0,
-     566,   393,     0,     0,     0,     0,     0,     0,     0,   393,
+       0,   663,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   705,     0,
+     569,     0,   569,     0,     0,     0,     0,   396,     0,   396,
+       0,   396,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   619,     0,     0,     0,     0,
+       0,     0,     0,     0,   618,   397,     0,     0,     0,     0,
+       0,     0,     0,   569,   396,     0,     0,     0,     0,     0,
+       0,     0,   396,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   566,     0,
-       0,     0,     0,     0,     0,     0,     0,   393,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   616,     0,     0,     0,
-     616,     0,     0,     0,     0,   615,     0,     0,     0,   615,
+       0,   569,     0,     0,     0,     0,     0,     0,     0,     0,
+     396,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   619,
+       0,     0,     0,   619,     0,     0,     0,     0,   618,     0,
+       0,     0,   618,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   566,     0,
-       0,     0,     0,     0,     0,     0,     0,   393,     0,     0,
+       0,   569,     0,     0,     0,     0,     0,     0,     0,     0,
+     396,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   616,   616,     0,   616,     0,   401,     0,     0,     0,
-     615,   615,     0,   615,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   619,   619,     0,   619,     0,   404,
+       0,     0,     0,   618,   618,     0,   618,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   616,     0,     0,     0,     0,     0,     0,     0,
-       0,   615,     0,     0,     0,     0,     0,     0,   616,     0,
-       0,     0,     0,     0,     0,   616,     0,   615,     0,     0,
-       0,     0,     0,     0,   615,   616,     0,     0,     0,   616,
-       0,     0,     0,     0,   615,   616,     0,     0,   615,     0,
-       0,     0,   442,     0,   615,     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,     0,
+       0,     0,     0,     0,     0,   619,     0,     0,     0,     0,
+       0,     0,     0,     0,   618,     0,     0,     0,     0,     0,
+       0,   619,     0,     0,     0,     0,     0,     0,   619,     0,
+     618,     0,     0,     0,     0,     0,     0,   618,   619,     0,
+       0,     0,   619,     0,     0,     0,     0,   618,   619,     0,
+       0,   618,     0,     0,     0,   445,     0,   618,     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,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   325,     0,     0,     0,
+       0,     0,     0,     0,   326,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,   331,     0,     0,     0,     0,     0,     0,     0,
+       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   325,     0,     0,     0,     0,     0,     0,
-       0,   326,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   327,   328,   329,   330,   331,
-       0,     0,     0,     0,     0,     0,     0,     0,   332,   333,
-     334,   335,   336,   337,   338,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     339,   340,   341,   342,   343,   344,     0,     0,     0,     0,
-       0,     0,     0,     0,   345,     0,   346,   347,   348,   349,
-     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
-     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,     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,     0,     0,   499,   500,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   501,   502,     0,   325,     0,   591,   592,     0,
-       0,     0,     0,   593,   503,   504,   505,   506,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   327,   328,   329,
-     330,   331,     0,     0,     0,   507,   508,   509,   510,   511,
-     332,   333,   334,   335,   336,   337,   338,   594,   595,   596,
-     597,     0,   598,   599,   600,   601,   602,   603,   604,   605,
-     606,   607,   339,   340,   341,   342,   343,   344,   512,   513,
-     514,   515,   516,   517,   518,   519,   345,   608,   346,   347,
-     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
-     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,     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,     0,     0,   499,   500,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   501,   502,     0,   325,     0,   591,
-     767,     0,     0,     0,     0,   593,   503,   504,   505,   506,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   327,
-     328,   329,   330,   331,     0,     0,     0,   507,   508,   509,
-     510,   511,   332,   333,   334,   335,   336,   337,   338,   594,
-     595,   596,   597,     0,   598,   599,   600,   601,   602,   603,
-     604,   605,   606,   607,   339,   340,   341,   342,   343,   344,
-     512,   513,   514,   515,   516,   517,   518,   519,   345,   608,
-     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
-     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
-     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,     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,     0,     0,   499,   500,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   501,   502,     0,   325,
-       0,   591,     0,     0,     0,     0,     0,   593,   503,   504,
-     505,   506,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   327,   328,   329,   330,   331,     0,     0,     0,   507,
-     508,   509,   510,   511,   332,   333,   334,   335,   336,   337,
-     338,   594,   595,   596,   597,     0,   598,   599,   600,   601,
-     602,   603,   604,   605,   606,   607,   339,   340,   341,   342,
-     343,   344,   512,   513,   514,   515,   516,   517,   518,   519,
-     345,   608,   346,   347,   348,   349,   350,   351,   352,   353,
-     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
-     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,     1,     2,     3,     4,     5,     6,     7,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     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,
@@ -1991,201 +1863,339 @@
      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,     0,     0,   499,
-     500,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   501,   502,
-       0,   325,     0,   484,     0,     0,     0,     0,     0,   593,
-     503,   504,   505,   506,     0,     0,     0,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
+       0,   325,     0,   594,   595,     0,     0,     0,     0,   596,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   327,   328,   329,   330,   331,     0,     0,
-       0,   507,   508,   509,   510,   511,   332,   333,   334,   335,
-     336,   337,   338,   594,   595,   596,   597,     0,   598,   599,
-     600,   601,   602,   603,   604,   605,   606,   607,   339,   340,
-     341,   342,   343,   344,   512,   513,   514,   515,   516,   517,
-     518,   519,   345,   608,   346,   347,   348,   349,   350,   351,
+       0,   510,   511,   512,   513,   514,   332,   333,   334,   335,
+     336,   337,   338,   597,   598,   599,   600,     0,   601,   602,
+     603,   604,   605,   606,   607,   608,   609,   610,   339,   340,
+     341,   342,   343,   344,   515,   516,   517,   518,   519,   520,
+     521,   522,   345,   611,   346,   347,   348,   349,   350,   351,
      352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
      362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
-     372,   373,   374,   375,   376,     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,     0,
-       0,   499,   500,     0,     0,     0,     0,     0,     0,     0,
+     372,   373,   374,   375,   376,   377,   378,   379,     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,     0,     0,   502,   503,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     501,   502,     0,   325,     0,     0,     0,     0,     0,     0,
-       0,   593,   503,   504,   505,   506,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   327,   328,   329,   330,   331,
-       0,     0,     0,   507,   508,   509,   510,   511,   332,   333,
-     334,   335,   336,   337,   338,   594,   595,   596,   597,     0,
-     598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
-     339,   340,   341,   342,   343,   344,   512,   513,   514,   515,
-     516,   517,   518,   519,   345,   608,   346,   347,   348,   349,
-     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
-     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,     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,     0,     0,   499,   500,     0,     0,     0,     0,     0,
+       0,     0,     0,   504,   505,     0,   325,     0,   594,   770,
+       0,     0,     0,     0,   596,   506,   507,   508,   509,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,   331,     0,     0,     0,   510,   511,   512,   513,
+     514,   332,   333,   334,   335,   336,   337,   338,   597,   598,
+     599,   600,     0,   601,   602,   603,   604,   605,   606,   607,
+     608,   609,   610,   339,   340,   341,   342,   343,   344,   515,
+     516,   517,   518,   519,   520,   521,   522,   345,   611,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     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,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
+       0,   325,     0,   594,     0,     0,     0,     0,     0,   596,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,   331,     0,     0,
+       0,   510,   511,   512,   513,   514,   332,   333,   334,   335,
+     336,   337,   338,   597,   598,   599,   600,     0,   601,   602,
+     603,   604,   605,   606,   607,   608,   609,   610,   339,   340,
+     341,   342,   343,   344,   515,   516,   517,   518,   519,   520,
+     521,   522,   345,   611,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     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,     0,     0,   502,   503,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   501,   502,     0,   325,     0,     0,     0,     0,
-       0,     0,     0,   593,   503,   504,   505,   506,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   327,   328,   329,
-     330,   331,     0,     0,     0,   507,   508,   509,   510,   511,
-     332,   333,   334,   335,   336,   337,   338,     0,     0,     0,
+       0,     0,     0,   504,   505,     0,   325,     0,   487,     0,
+       0,     0,     0,     0,   596,   506,   507,   508,   509,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,   331,     0,     0,     0,   510,   511,   512,   513,
+     514,   332,   333,   334,   335,   336,   337,   338,   597,   598,
+     599,   600,     0,   601,   602,   603,   604,   605,   606,   607,
+     608,   609,   610,   339,   340,   341,   342,   343,   344,   515,
+     516,   517,   518,   519,   520,   521,   522,   345,   611,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     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,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
+       0,   325,     0,     0,     0,     0,     0,     0,     0,   596,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,   331,     0,     0,
+       0,   510,   511,   512,   513,   514,   332,   333,   334,   335,
+     336,   337,   338,   597,   598,   599,   600,     0,   601,   602,
+     603,   604,   605,   606,   607,   608,   609,   610,   339,   340,
+     341,   342,   343,   344,   515,   516,   517,   518,   519,   520,
+     521,   522,   345,   611,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     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,     0,     0,   502,   503,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   339,   340,   341,   342,   343,   344,   512,   513,
-     514,   515,   516,   517,   518,   519,   345,     0,   346,   347,
-     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
-     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,     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,     0,     0,     0,   318,   319,   320,   321,
-     322,   323,   324,     0,     0,   499,   500,     0,     0,     0,
+       0,     0,     0,   504,   505,     0,   325,     0,     0,     0,
+       0,     0,     0,     0,   596,   506,   507,   508,   509,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,   331,     0,     0,     0,   510,   511,   512,   513,
+     514,   332,   333,   334,   335,   336,   337,   338,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   501,   502,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   503,   504,   505,   506,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   327,
-     328,   329,   330,     0,     0,     0,     0,   507,   508,   509,
-     510,   511,   332,   333,   334,   335,   336,   337,   338,     0,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,   515,
+     516,   517,   518,   519,   520,   521,   522,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     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,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   339,   340,   341,   342,   343,   344,
-     512,   513,   514,   515,   516,   517,   518,   519,   345,     0,
-     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
-     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
-     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,     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,     0,     0,     0,     0,     0,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,   510,   511,   512,   513,   514,   332,   333,   334,   335,
+     336,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,   515,   516,   517,   518,   519,   520,
+     521,   522,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     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,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   325,
-       0,     0,     0,     0,     0,     0,     0,   326,     0,     0,
+       0,     0,     0,     0,     0,     0,   325,     0,     0,     0,
+       0,     0,     0,     0,   326,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,   331,     0,     0,     0,     0,     0,     0,     0,
+       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   327,   328,   329,   330,   331,     0,     0,     0,     0,
-       0,     0,     0,     0,   332,   333,   334,   335,   336,   337,
-     338,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   339,   340,   341,   342,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-     345,     0,   346,   347,   348,   349,   350,   351,   352,   353,
-     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
-     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,     1,     2,     3,     4,     5,     6,     7,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     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,
@@ -2224,194 +2234,59 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
-     336,   337,   338,   594,     0,     0,   597,     0,   598,   599,
-       0,     0,   602,     0,     0,     0,     0,     0,   339,   340,
+     336,   337,   338,   597,     0,     0,   600,     0,   601,   602,
+       0,     0,   605,     0,     0,     0,     0,     0,   339,   340,
      341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
        0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
      352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
      362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
-     372,   373,   374,   375,   376,     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,     0,
-       0,     0,   318,   319,   320,   321,   322,   323,   324,     0,
+     372,   373,   374,   375,   376,   377,   378,   379,     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,     0,     0,     0,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   438,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,     0,     0,     0,     0,     0,     0,     0,     0,
+     439,   332,   333,   334,   335,   336,   337,   338,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   435,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   327,   328,   329,   330,     0,
-       0,     0,     0,     0,     0,     0,     0,   436,   332,   333,
-     334,   335,   336,   337,   338,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     339,   340,   341,   342,   343,   344,     0,     0,     0,     0,
-       0,     0,     0,     0,   345,     0,   346,   347,   348,   349,
-     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
-     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,     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,     0,     0,     0,   318,   319,   320,   321,   322,   323,
-     324,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   325,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   327,   328,   329,
-     330,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     332,   333,   334,   335,   336,   337,   338,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   339,   340,   341,   342,   343,   344,     0,     0,
-       0,     0,     0,     0,     0,     0,   345,     0,   346,   347,
-     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
-     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,     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,     0,     0,     0,   318,   319,   320,   321,
-     322,   323,   324,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     706,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   327,
-     328,   329,   330,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   332,   333,   334,   335,   336,   337,   338,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   339,   340,   341,   342,   343,   344,
-       0,     0,     0,     0,     0,     0,     0,     0,   345,     0,
-     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
-     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
-     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,     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,     0,     0,     0,   318,   319,
-     320,   321,   322,   323,   324,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   819,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   327,   328,   329,   330,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   332,   333,   334,   335,   336,   337,
-     338,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   339,   340,   341,   342,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-     345,     0,   346,   347,   348,   349,   350,   351,   352,   353,
-     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
-     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,     1,     2,     3,     4,     5,     6,     7,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     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,
@@ -2446,7 +2321,7 @@
      318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   854,     0,     0,     0,     0,     0,
+       0,   325,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
@@ -2456,52 +2331,319 @@
        0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
      352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
      362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
-     372,   373,   374,   375,   376,     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,     0,
-       0,     0,   318,   319,   320,   321,   322,   323,   324,     0,
+     372,   373,   374,   375,   376,   377,   378,   379,     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,     0,     0,     0,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   709,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     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,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   822,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+     336,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
+       0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     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,     0,     0,     0,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   857,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     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,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   327,   328,   329,   330,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   332,   333,
-     334,   335,   336,   337,   338,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+     336,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
+       0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     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,   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,     0,     0,     0,     0,     0,     0,   321,     0,     0,
+       0,     0,     0,   502,   503,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     339,   340,   341,   342,   343,   344,     0,     0,     0,     0,
-       0,     0,     0,     0,   345,     0,   346,   347,   348,   349,
-     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
-     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,     2,     3,     4,
+       0,     0,   504,   505,     0,     0,     0,   639,   777,     0,
+       0,     0,     0,     0,   506,   507,   508,   509,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   510,   511,   512,   513,   514,
+     332,     0,     0,     0,     0,   337,   338,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   515,   516,
+     517,   518,   519,   520,   521,   522,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     358,     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,   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,     0,     0,     0,     0,     0,     0,
+     321,     0,     0,     0,     0,     0,   502,   503,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   504,   505,     0,     0,     0,
+     639,   888,     0,     0,     0,     0,     0,   506,   507,   508,
+     509,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   510,   511,
+     512,   513,   514,   332,     0,     0,     0,     0,   337,   338,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   515,   516,   517,   518,   519,   520,   521,   522,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   358,     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,   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,     0,     0,     0,
+       0,     0,     0,   321,     0,     0,     0,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
+       0,     0,   578,     0,     0,     0,     0,     0,     0,     0,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   510,   511,   512,   513,   514,   332,     0,     0,     0,
+       0,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   515,   516,   517,   518,   519,   520,
+     521,   522,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   358,     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,
@@ -2534,16 +2676,16 @@
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
        0,     0,     0,     0,     0,     0,   321,     0,     0,     0,
-       0,     0,   499,   500,     0,     0,     0,     0,     0,     0,
+       0,     0,   502,   503,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   501,   502,     0,     0,     0,   636,   774,     0,     0,
-       0,     0,     0,   503,   504,   505,   506,     0,     0,     0,
+       0,   504,   505,     0,     0,     0,   639,     0,     0,     0,
+       0,     0,     0,   506,   507,   508,   509,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   507,   508,   509,   510,   511,   332,
+       0,     0,     0,     0,   510,   511,   512,   513,   514,   332,
        0,     0,     0,     0,   337,   338,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   512,   513,   514,
-     515,   516,   517,   518,   519,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   515,   516,   517,
+     518,   519,   520,   521,   522,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   358,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
@@ -2577,16 +2719,16 @@
      292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
      302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
      312,   313,   314,     0,     0,     0,     0,     0,     0,   321,
-       0,     0,     0,     0,     0,   499,   500,     0,     0,     0,
+       0,     0,     0,     0,     0,   502,   503,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   501,   502,     0,     0,     0,   636,
-     885,     0,     0,     0,     0,     0,   503,   504,   505,   506,
+       0,     0,     0,     0,   504,   505,     0,     0,   736,     0,
+       0,     0,     0,     0,     0,     0,   506,   507,   508,   509,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   507,   508,   509,
-     510,   511,   332,     0,     0,     0,     0,   337,   338,     0,
+       0,     0,     0,     0,     0,     0,     0,   510,   511,   512,
+     513,   514,   332,     0,     0,     0,     0,   337,   338,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     512,   513,   514,   515,   516,   517,   518,   519,     0,     0,
+     515,   516,   517,   518,   519,   520,   521,   522,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   358,     2,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
@@ -2620,17 +2762,17 @@
      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,     0,     0,     0,     0,
-       0,     0,   321,     0,     0,     0,     0,     0,   499,   500,
+       0,     0,   321,     0,     0,     0,     0,     0,   502,   503,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   501,   502,     0,
-       0,   575,     0,     0,     0,     0,     0,     0,     0,   503,
-     504,   505,   506,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   504,   505,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   747,   506,
+     507,   508,   509,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     507,   508,   509,   510,   511,   332,     0,     0,     0,     0,
+     510,   511,   512,   513,   514,   332,     0,     0,     0,     0,
      337,   338,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   512,   513,   514,   515,   516,   517,   518,
-     519,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   515,   516,   517,   518,   519,   520,   521,
+     522,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   358,     2,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
@@ -2664,16 +2806,16 @@
      296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
      306,   307,   308,   309,   310,   311,   312,   313,   314,     0,
        0,     0,     0,     0,     0,   321,     0,     0,     0,     0,
-       0,   499,   500,     0,     0,     0,     0,     0,     0,     0,
+       0,   502,   503,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     501,   502,     0,     0,     0,   636,     0,     0,     0,     0,
-       0,     0,   503,   504,   505,   506,     0,     0,     0,     0,
+     504,   505,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   506,   507,   508,   509,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   507,   508,   509,   510,   511,   332,     0,
+       0,     0,     0,   510,   511,   512,   513,   514,   332,     0,
        0,     0,     0,   337,   338,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   512,   513,   514,   515,
-     516,   517,   518,   519,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   515,   516,   517,   518,
+     519,   520,   521,   522,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,   358,     2,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
@@ -2707,16 +2849,16 @@
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
      303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
      313,   314,     0,     0,     0,     0,     0,     0,   321,     0,
-       0,     0,     0,     0,   499,   500,     0,     0,     0,     0,
+       0,     0,     0,     0,   502,   503,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   501,   502,     0,     0,   733,     0,     0,
-       0,     0,     0,     0,     0,   503,   504,   505,   506,     0,
+       0,     0,     0,   504,   505,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   506,   507,   508,   509,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   507,   508,   509,   510,
-     511,   332,     0,     0,     0,     0,   337,   338,     0,     0,
+       0,     0,     0,     0,     0,     0,   510,   511,   512,   513,
+     514,   332,     0,     0,     0,     0,   337,   657,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   512,
-     513,   514,   515,   516,   517,   518,   519,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   515,
+     516,   517,   518,   519,   520,   521,   522,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,   358,     2,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
@@ -2750,16 +2892,16 @@
      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,     0,     0,     0,     0,     0,
-       0,   321,     0,     0,     0,     0,     0,   499,   500,     0,
+       0,   321,     0,     0,     0,     0,     0,   502,   503,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   501,   502,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   744,   503,   504,
-     505,   506,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   507,
-     508,   509,   510,   511,   332,     0,     0,     0,     0,   337,
+       0,     0,     0,     0,     0,     0,   504,   505,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   506,   507,
+     508,   509,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   510,
+     511,   512,   513,   697,   332,     0,     0,     0,     0,   337,
      338,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   512,   513,   514,   515,   516,   517,   518,   519,
+       0,     0,   515,   516,   517,   518,   519,   520,   521,   522,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,   358,     2,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
@@ -2794,422 +2936,248 @@
      297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
      307,   308,   309,   310,   311,   312,   313,   314,     0,     0,
        0,     0,     0,     0,   321,     0,     0,     0,     0,     0,
-     499,   500,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   501,
-     502,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   503,   504,   505,   506,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   507,   508,   509,   510,   511,   332,     0,     0,
-       0,     0,   337,   338,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   512,   513,   514,   515,   516,
-     517,   518,   519,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   358,     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,   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,     0,     0,     0,     0,     0,     0,   321,     0,     0,
-       0,     0,     0,   499,   500,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   501,   502,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   503,   504,   505,   506,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   507,   508,   509,   510,   511,
-     332,     0,     0,     0,     0,   337,   654,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   512,   513,
-     514,   515,   516,   517,   518,   519,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     358,     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,   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,     0,     0,     0,     0,     0,     0,
-     321,     0,     0,     0,     0,     0,   499,   500,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   501,   502,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   503,   504,   505,
-     506,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   507,   508,
-     509,   510,   694,   332,     0,     0,     0,     0,   337,   338,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   512,   513,   514,   515,   516,   517,   518,   519,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   358,     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,   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,     0,     0,     0,
-       0,     0,     0,   321,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   332,     0,     0,     0,
-       0,   337,   338
+       0,     0,     0,     0,     0,     0,     0,   332,     0,     0,
+       0,     0,   337,   338
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   382,     0,   493,   622,   502,   401,   401,   481,     0,
-     434,   406,   542,     0,     0,   736,   440,   634,   567,   636,
-     401,   390,   639,   413,   569,   406,   348,   547,   558,   348,
-     359,   385,   552,   331,   332,   336,   353,   349,   528,   348,
-     898,   561,   351,   351,   348,   426,   356,   905,   350,   352,
-     570,   359,   351,   356,   356,   409,   385,   915,   368,   358,
-     382,   430,   381,   382,   383,   384,   490,   491,   385,   367,
-     368,   372,   351,   382,   547,   349,   351,   446,   382,   552,
-     359,   329,   330,   358,   349,   558,   351,   351,   561,   374,
-     375,   376,   473,   358,   358,   640,   353,   570,   361,   356,
-     363,   349,   359,   351,   601,   349,   603,   355,   408,   409,
-     410,   411,   412,   413,   414,   350,   589,   719,   720,   721,
-     722,   356,   740,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   350,   350,   356,   350,   349,   359,   356,
-     356,   349,   356,   358,   634,   350,   636,   350,   349,   639,
-     540,   356,   649,   356,   540,   350,   773,   351,   350,   708,
-     546,   356,   548,   653,   356,   551,   556,   553,   349,   555,
-     556,   350,   350,   350,   560,   350,   350,   356,   356,   356,
-     349,   356,   356,   350,   350,   350,   567,   350,   569,   356,
-     356,   356,   350,   356,   350,   350,   565,   350,   919,   350,
-     356,   356,   350,   356,   350,   356,   350,   350,   356,   350,
-     356,   356,   356,   356,   352,   356,   352,   349,   356,   356,
-     356,   385,   359,   841,   381,   382,   383,   384,   382,   778,
-     439,   385,   382,   327,   328,   385,   853,   632,   632,   356,
-     382,   356,   359,   385,   359,   742,   354,   382,   356,   746,
-     385,   632,   382,   382,   382,   385,   385,   385,   382,   640,
-     382,   385,   382,   385,   382,   385,   382,   385,   356,   385,
-     356,   359,   481,   359,   764,   765,   349,   797,   798,   703,
-     810,   333,   334,   773,   804,   805,   364,   365,   366,   359,
-     499,   500,   909,   356,   357,   356,   357,   715,   716,   367,
-     717,   718,   723,   724,   359,   385,   385,   925,   353,   385,
-     353,   351,   351,   385,   385,   350,   385,   359,   349,   356,
-     358,   350,   531,   356,   797,   798,   358,   708,   356,   356,
-     356,   804,   805,   356,   356,   356,   356,   810,   547,   812,
-     356,   356,   839,   552,   358,   842,   359,   350,   349,   558,
-     349,   385,   561,   371,   351,   385,   351,   369,   348,   352,
-     385,   570,   370,   853,   335,   337,   385,   352,   349,   349,
-     354,   359,   349,   349,   385,   349,   359,   359,   357,   385,
-     589,   359,   382,   349,   359,   882,   359,   350,   356,   359,
-     390,   382,   356,   358,   356,   350,   350,   778,   398,   390,
-     398,   401,   899,   352,   352,   895,   406,   398,   406,   356,
-     401,   398,   398,   348,   348,   406,   416,   914,   354,   909,
-     406,   382,   350,   349,   393,   385,   426,   425,   353,   358,
-     430,   350,   359,   353,   725,   426,   353,   359,   397,   430,
-     354,   727,   726,   730,   331,   728,   446,   842,   729,   658,
-     702,   572,   817,   844,   904,   446,   915,   844,   916,   632,
-     882,   842,   632,   430,   632,   398,   563,   424,   426,   795,
-     793,   798,   802,   473,   430,   800,   808,   805,   812,   810,
-      -1,    -1,   473,    -1,   484,    -1,    -1,   882,    -1,    -1,
-      -1,    -1,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   882,    -1,   712,   713,   714,   715,   716,   717,   718,
+       0,   385,     0,   404,   496,   484,   625,     0,   409,     0,
+     505,     0,   437,   442,   550,   545,   404,   570,   443,   555,
+     404,   739,   393,   348,   416,   409,   572,   336,   564,   353,
+     637,   561,   639,   348,   351,   642,   351,   573,   348,   531,
+     359,   348,   356,   331,   332,   429,   385,   382,   352,   349,
+     385,   349,   356,   351,   368,   484,   381,   382,   383,   384,
+     358,   385,   433,   372,   329,   330,   385,   382,   493,   494,
+     409,   550,   382,   502,   503,   382,   555,   349,   449,   367,
+     368,   351,   561,   351,   349,   564,   351,   543,   358,   901,
+     355,   359,   476,   549,   573,   551,   908,   643,   554,   359,
+     556,   351,   558,   559,   351,   534,   918,   563,   358,   604,
+     351,   606,   359,   592,   350,   382,   353,   358,   385,   356,
+     356,   550,   359,   350,   743,   350,   555,   350,   350,   356,
+     349,   356,   561,   356,   356,   564,   411,   412,   413,   414,
+     415,   416,   417,   350,   573,   637,   350,   639,   350,   356,
+     642,   543,   356,   350,   356,   350,   350,   652,   711,   356,
+     350,   356,   356,   592,   656,   356,   356,   559,   359,   776,
+     338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
+     352,   350,   356,   350,   356,   350,   570,   356,   572,   356,
+     358,   356,   350,   350,   350,   350,   350,   568,   356,   356,
+     356,   356,   356,   350,   922,   350,   350,   350,   350,   356,
+     350,   356,   356,   356,   356,   350,   356,   350,   352,   385,
+     382,   356,   356,   385,   356,   844,   349,   359,   781,   349,
+     382,   349,   661,   385,   635,   381,   382,   383,   384,   722,
+     723,   724,   725,   382,   349,   382,   385,   635,   385,   856,
+     745,   635,   382,   382,   749,   385,   385,   382,   382,   643,
+     385,   385,   349,   382,   800,   801,   385,   382,   327,   328,
+     385,   807,   808,   349,   356,   767,   768,   359,   361,   356,
+     363,   706,   359,   813,   776,   349,   715,   716,   717,   718,
      719,   720,   721,   722,   723,   724,   725,   726,   727,   728,
-     729,   730,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   536,    -1,
+     729,   730,   731,   732,   733,   912,   367,   356,   356,   928,
+     359,   359,   374,   375,   376,   333,   334,   364,   365,   366,
+     359,   800,   801,   354,   353,   356,   353,   711,   807,   808,
+     356,   357,   356,   357,   813,   385,   815,   718,   719,   385,
+     720,   721,   385,   726,   727,   351,   351,   842,   385,   385,
+     845,   350,   385,   356,   371,   359,   358,   358,   350,   356,
+     356,   356,   356,   385,   856,   349,   356,   382,   356,   356,
+     356,   800,   801,   356,   356,   350,   349,   358,   807,   808,
+     359,   351,   349,   351,   813,   385,   815,   348,   352,   335,
+     885,   354,   370,   393,   385,   369,   337,   781,   352,   349,
+     385,   401,   393,   401,   404,   385,   898,   902,   401,   409,
+     401,   409,   401,   404,   385,   359,   409,   359,   409,   419,
+     912,   349,   917,   349,   359,   349,   357,   359,   349,   429,
+     428,   349,   359,   433,   359,   350,   359,   385,   429,   358,
+     385,   350,   433,   356,   845,   356,   356,   350,   352,   449,
+     352,   356,   348,   393,   348,   354,   385,   350,   449,   349,
+     358,   845,   353,   350,   359,   353,   728,   397,   353,   730,
+     359,   354,   729,   731,   733,   433,   476,   732,   429,   575,
+     433,   331,   820,   847,   885,   476,   907,   487,   705,   919,
+     918,   427,   847,   401,   635,   885,   487,   635,   566,   635,
+     801,   885,   798,   796,   815,   808,   805,   813,   803,   811,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   565,    -1,   567,    -1,   569,
-      -1,    -1,    -1,    -1,   565,    -1,   567,    -1,   569,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   797,   798,
-      -1,    -1,    -1,    -1,    -1,   804,   805,    -1,    -1,    -1,
-      -1,   810,    -1,   812,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   622,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   622,   632,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     640,   632,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   640,
+      -1,   539,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   568,    -1,
+     570,    -1,   572,    -1,    -1,    -1,    -1,   568,    -1,   570,
+      -1,   572,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   625,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   625,   635,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   643,   635,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   643,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   708,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   708,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   736,    -1,    -1,    -1,
-     740,    -1,    -1,    -1,    -1,   736,    -1,    -1,    -1,   740,
+      -1,   711,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     711,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   739,
+      -1,    -1,    -1,   743,    -1,    -1,    -1,    -1,   739,    -1,
+      -1,    -1,   743,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   778,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   778,    -1,    -1,
+      -1,   781,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     781,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   841,   842,    -1,   844,    -1,   844,    -1,    -1,    -1,
-     841,   842,    -1,   844,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   844,   845,    -1,   847,    -1,   847,
+      -1,    -1,    -1,   844,   845,    -1,   847,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   882,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   882,    -1,    -1,    -1,    -1,    -1,    -1,   898,    -1,
-      -1,    -1,    -1,    -1,    -1,   905,    -1,   898,    -1,    -1,
-      -1,    -1,    -1,    -1,   905,   915,    -1,    -1,    -1,   919,
-      -1,    -1,    -1,    -1,   915,   925,    -1,    -1,   919,    -1,
-      -1,    -1,     0,    -1,   925,     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,    -1,
+      -1,    -1,    -1,    -1,    -1,   885,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   885,    -1,    -1,    -1,    -1,    -1,
+      -1,   901,    -1,    -1,    -1,    -1,    -1,    -1,   908,    -1,
+     901,    -1,    -1,    -1,    -1,    -1,    -1,   908,   918,    -1,
+      -1,    -1,   922,    -1,    -1,    -1,    -1,   918,   928,    -1,
+      -1,   922,    -1,    -1,    -1,     0,    -1,   928,     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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   351,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   359,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,
-     388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   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,     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,    -1,    -1,   329,
+     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
+      -1,   351,    -1,   353,   354,    -1,    -1,    -1,    -1,   359,
+     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,   377,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,   393,   394,   395,   396,    -1,   398,   399,
+     400,   401,   402,   403,   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,     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,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     408,   409,   410,   411,   412,   413,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   422,    -1,   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,     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,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   348,   349,    -1,   351,    -1,   353,   354,    -1,
-      -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,
-     376,   377,    -1,    -1,    -1,   381,   382,   383,   384,   385,
-     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
-     396,    -1,   398,   399,   400,   401,   402,   403,   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,     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,    -1,    -1,   329,   330,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   348,   349,    -1,   351,    -1,   353,
-     354,    -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
-     374,   375,   376,   377,    -1,    -1,    -1,   381,   382,   383,
-     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   396,    -1,   398,   399,   400,   401,   402,   403,
-     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,     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,    -1,    -1,   329,   330,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,   351,
-      -1,   353,    -1,    -1,    -1,    -1,    -1,   359,   360,   361,
-     362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   373,   374,   375,   376,   377,    -1,    -1,    -1,   381,
-     382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
-     392,   393,   394,   395,   396,    -1,   398,   399,   400,   401,
-     402,   403,   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,     3,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,   348,   349,    -1,   351,    -1,   353,   354,
+      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,    -1,   398,   399,   400,   401,   402,   403,   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,     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,
@@ -3254,188 +3222,235 @@
      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,     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,    -1,
-      -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     450,   451,   452,   453,   454,   455,   456,   457,     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,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     348,   349,    -1,   351,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   359,   360,   361,   362,   363,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,
-      -1,    -1,    -1,   381,   382,   383,   384,   385,   386,   387,
-     388,   389,   390,   391,   392,   393,   394,   395,   396,    -1,
-     398,   399,   400,   401,   402,   403,   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,     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,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   348,   349,    -1,   351,    -1,   353,    -1,
+      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,    -1,   398,   399,   400,   401,   402,   403,   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,     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,    -1,    -1,   329,
+     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
+      -1,   351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,
+     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,   377,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,   393,   394,   395,   396,    -1,   398,   399,
+     400,   401,   402,   403,   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,     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,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   348,   349,    -1,   351,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,
-     376,   377,    -1,    -1,    -1,   381,   382,   383,   384,   385,
-     386,   387,   388,   389,   390,   391,   392,    -1,    -1,    -1,
+      -1,    -1,    -1,   348,   349,    -1,   351,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   408,   409,   410,   411,   412,   413,   414,   415,
-     416,   417,   418,   419,   420,   421,   422,    -1,   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,     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,    -1,    -1,    -1,   320,   321,   322,   323,
-     324,   325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,    -1,   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,     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,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,   329,
+     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   348,   349,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
-     374,   375,   376,    -1,    -1,    -1,    -1,   381,   382,   383,
-     384,   385,   386,   387,   388,   389,   390,   391,   392,    -1,
+     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+     420,   421,   422,    -1,   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,     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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   408,   409,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,   420,   421,   422,    -1,
-     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,     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,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   351,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   373,   374,   375,   376,   377,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,   391,
-     392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   408,   409,   410,   411,
-     412,   413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     422,    -1,   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,     3,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   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,     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,
@@ -3480,188 +3495,144 @@
       -1,    -1,   422,    -1,   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,     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,    -1,
-      -1,    -1,   320,   321,   322,   323,   324,   325,   326,    -1,
+     450,   451,   452,   453,   454,   455,   456,   457,     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,    -1,    -1,    -1,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -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,   373,   374,
+     375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     385,   386,   387,   388,   389,   390,   391,   392,    -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,   373,   374,   375,   376,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   385,   386,   387,
-     388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     408,   409,   410,   411,   412,   413,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   422,    -1,   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,     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,    -1,    -1,    -1,   320,   321,   322,   323,   324,   325,
-     326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,
-     376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     386,   387,   388,   389,   390,   391,   392,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   408,   409,   410,   411,   412,   413,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   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,     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,    -1,    -1,    -1,   320,   321,   322,   323,
-     324,   325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   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,     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,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     354,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
-     374,   375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   386,   387,   388,   389,   390,   391,   392,    -1,
+      -1,   351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   408,   409,   410,   411,   412,   413,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,
-     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,     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,    -1,    -1,    -1,   320,   321,
-     322,   323,   324,   325,   326,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,
+     390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   422,    -1,   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,     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,    -1,    -1,    -1,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   354,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   373,   374,   375,   376,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,   391,
-     392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   408,   409,   410,   411,
-     412,   413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     422,    -1,   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,     3,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   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,     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,
@@ -3706,231 +3677,13 @@
       -1,    -1,   422,    -1,   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,     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,    -1,
-      -1,    -1,   320,   321,   322,   323,   324,   325,   326,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,
-     388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     408,   409,   410,   411,   412,   413,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   422,    -1,   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,     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,   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,
-      -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,
-      -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   348,   349,    -1,    -1,    -1,   353,   354,    -1,    -1,
-      -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,   386,
-      -1,    -1,    -1,    -1,   391,   392,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,   415,   416,
-     417,   418,   419,   420,   421,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   436,
-       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,   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,    -1,    -1,    -1,    -1,    -1,    -1,   323,
-      -1,    -1,    -1,    -1,    -1,   329,   330,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   348,   349,    -1,    -1,    -1,   353,
-     354,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,
-     384,   385,   386,    -1,    -1,    -1,    -1,   391,   392,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     414,   415,   416,   417,   418,   419,   420,   421,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   436,     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,   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,    -1,    -1,    -1,    -1,
-      -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,   329,   330,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,
-      -1,   352,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   360,
-     361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     381,   382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,
-     391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   414,   415,   416,   417,   418,   419,   420,
-     421,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   436,     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,
-     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,    -1,
-      -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,
-      -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     348,   349,    -1,    -1,    -1,   353,    -1,    -1,    -1,    -1,
-      -1,    -1,   360,   361,   362,   363,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   381,   382,   383,   384,   385,   386,    -1,
-      -1,    -1,    -1,   391,   392,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   414,   415,   416,   417,
-     418,   419,   420,   421,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   436,     4,
+     450,   451,   452,   453,   454,   455,   456,   457,     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,    -1,    -1,    63,    64,
+      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,
@@ -3956,105 +3709,66 @@
      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,    -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,
-      -1,    -1,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
+     315,   316,    -1,    -1,    -1,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   348,   349,    -1,    -1,   352,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
-     385,   386,    -1,    -1,    -1,    -1,   391,   392,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,
-     415,   416,   417,   418,   419,   420,   421,    -1,    -1,    -1,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   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,     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,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   436,     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,   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,    -1,    -1,    -1,    -1,    -1,
-      -1,   323,    -1,    -1,    -1,    -1,    -1,   329,   330,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,   360,   361,
-     362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,
-     382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,   391,
-     392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   414,   415,   416,   417,   418,   419,   420,   421,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   436,     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,   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,    -1,    -1,
-      -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,
-     329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,
-     349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   381,   382,   383,   384,   385,   386,    -1,    -1,
-      -1,    -1,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   414,   415,   416,   417,   418,
-     419,   420,   421,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   436,     4,     5,
+      -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,
+     390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   422,    -1,   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,     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,
@@ -4089,7 +3803,7 @@
      316,    -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,
       -1,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   348,   349,    -1,    -1,    -1,   353,   354,    -1,
       -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
@@ -4133,7 +3847,7 @@
      323,    -1,    -1,    -1,    -1,    -1,   329,   330,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   348,   349,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,
+     353,   354,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,
      363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,
      383,   384,   385,   386,    -1,    -1,    -1,    -1,   391,   392,
@@ -4173,14 +3887,317 @@
      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,    -1,    -1,    -1,
-      -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,   329,
+     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
+      -1,    -1,   352,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,    -1,    -1,    -1,
+      -1,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   414,   415,   416,   417,   418,   419,
+     420,   421,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   436,     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,   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,
+      -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,
+      -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   348,   349,    -1,    -1,    -1,   353,    -1,    -1,    -1,
+      -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,   386,
+      -1,    -1,    -1,    -1,   391,   392,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,   415,   416,
+     417,   418,   419,   420,   421,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   436,
+       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,   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,    -1,    -1,    -1,    -1,    -1,    -1,   323,
+      -1,    -1,    -1,    -1,    -1,   329,   330,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   348,   349,    -1,    -1,   352,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,
+     384,   385,   386,    -1,    -1,    -1,    -1,   391,   392,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     414,   415,   416,   417,   418,   419,   420,   421,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   436,     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,   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,    -1,    -1,    -1,    -1,
+      -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,   329,   330,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,   360,
+     361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     381,   382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,
+     391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   414,   415,   416,   417,   418,   419,   420,
+     421,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   436,     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,
+     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,    -1,
+      -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,
+      -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     348,   349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   360,   361,   362,   363,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   381,   382,   383,   384,   385,   386,    -1,
+      -1,    -1,    -1,   391,   392,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   414,   415,   416,   417,
+     418,   419,   420,   421,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   436,     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,   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,    -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,
+      -1,    -1,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,   386,    -1,    -1,    -1,    -1,   391,   392,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,
+     415,   416,   417,   418,   419,   420,   421,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   436,     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,   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,    -1,    -1,    -1,    -1,    -1,
+      -1,   323,    -1,    -1,    -1,    -1,    -1,   329,   330,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   360,   361,
+     362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,
+     382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,   391,
+     392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   414,   415,   416,   417,   418,   419,   420,   421,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   436,     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,   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,    -1,    -1,
+      -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   386,    -1,    -1,    -1,
-      -1,   391,   392
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,    -1,    -1,
+      -1,    -1,   391,   392
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -4224,136 +4241,137 @@
      409,   410,   411,   412,   413,   422,   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,   486,   487,   490,
-     491,   492,   493,   497,   498,   499,   500,   501,   502,   505,
-     506,   507,   508,   509,   511,   516,   517,   518,   559,   560,
-     561,   563,   570,   574,   575,   580,   583,   349,   349,   349,
-     349,   349,   349,   349,   349,   351,   517,   353,   385,   349,
-     349,   359,   385,   359,   562,   350,   356,   494,   495,   496,
-     506,   511,   356,   359,   385,   359,   385,   507,   511,   367,
-     513,   514,     0,   560,   491,   499,   506,   359,   490,   385,
-     566,   567,   584,   585,   382,   385,   566,   382,   566,   382,
-     566,   382,   566,   382,   566,   566,   584,   382,   566,   385,
-     564,   565,   511,   520,   353,   385,   409,   503,   504,   385,
-     510,   351,   359,   512,   353,   538,   563,   495,   494,   496,
-     385,   385,   349,   358,   512,   353,   356,   359,   489,   329,
-     330,   348,   349,   360,   361,   362,   363,   381,   382,   383,
-     384,   385,   414,   415,   416,   417,   418,   419,   420,   421,
-     456,   457,   458,   460,   461,   462,   463,   464,   465,   466,
-     467,   468,   509,   511,   515,   512,   350,   385,   359,   358,
-     356,   350,   356,   350,   356,   358,   356,   356,   356,   350,
-     356,   356,   356,   356,   356,   356,   356,   350,   356,   350,
-     356,   349,   352,   356,   359,   506,   511,   521,   522,   519,
-     358,   350,   356,   350,   356,   352,   467,   469,   470,   471,
-     472,   473,   474,   475,   476,   477,   478,   479,   480,   351,
-     359,   353,   354,   359,   393,   394,   395,   396,   398,   399,
-     400,   401,   402,   403,   404,   405,   406,   407,   423,   467,
-     480,   482,   484,   486,   490,   509,   511,   527,   528,   529,
-     530,   531,   539,   540,   541,   542,   545,   546,   549,   550,
-     551,   558,   563,   512,   358,   512,   353,   482,   525,   358,
-     488,   385,   356,   359,   467,   467,   484,   329,   330,   351,
-     355,   350,   350,   356,   392,   482,   349,   467,   356,   368,
-     563,   348,   351,   382,   567,   584,   385,   585,   348,   381,
-     382,   383,   384,   571,   572,   382,   480,   485,   573,   382,
-     381,   382,   383,   384,   576,   577,   382,   485,   578,   382,
-     348,   579,   382,   584,   385,   485,   581,   582,   382,   485,
-     352,   565,   511,   385,   523,   524,   354,   522,   521,   485,
-     504,   385,   364,   365,   366,   361,   363,   327,   328,   331,
-     332,   367,   368,   333,   334,   371,   370,   369,   335,   337,
-     336,   372,   352,   352,   480,   354,   532,   349,   359,   359,
-     553,   349,   349,   359,   359,   484,   349,   484,   357,   359,
-     359,   359,   359,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   358,   483,   356,   359,   354,   528,   542,
-     546,   551,   525,   358,   354,   525,   526,   525,   521,   385,
-     350,   459,   484,   385,   482,   467,   348,   382,   568,   569,
-     350,   358,   350,   356,   350,   356,   350,   356,   356,   350,
-     356,   350,   356,   350,   356,   356,   350,   356,   356,   350,
-     356,   350,   356,   350,   350,   523,   512,   356,   359,   354,
-     467,   467,   467,   469,   469,   470,   470,   471,   471,   471,
-     471,   472,   472,   473,   474,   475,   476,   477,   478,   481,
-     352,   539,   552,   528,   554,   484,   359,   484,   357,   482,
-     482,   525,   354,   356,   354,   352,   352,   356,   352,   356,
-     572,   571,   485,   573,   577,   576,   485,   578,   348,   579,
-     581,   582,   359,   524,   484,   533,   484,   499,   544,   393,
-     527,   540,   555,   350,   350,   354,   525,   348,   382,   350,
-     350,   350,   350,   350,   350,   357,   354,   385,   350,   349,
-     544,   556,   557,   535,   536,   537,   543,   547,   482,   358,
-     529,   534,   538,   484,   359,   350,   397,   531,   529,   353,
-     525,   350,   484,   534,   535,   539,   548,   359,   354
+     448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
+     489,   490,   493,   494,   495,   496,   500,   501,   502,   503,
+     504,   505,   508,   509,   510,   511,   512,   514,   519,   520,
+     521,   562,   563,   564,   566,   573,   577,   578,   583,   586,
+     349,   349,   349,   349,   349,   349,   349,   349,   351,   520,
+     353,   385,   349,   349,   359,   385,   359,   565,   350,   356,
+     497,   498,   499,   509,   514,   356,   359,   385,   359,   385,
+     510,   514,   367,   516,   517,     0,   563,   494,   502,   509,
+     359,   493,   385,   569,   570,   587,   588,   382,   385,   569,
+     382,   569,   382,   569,   382,   569,   382,   569,   569,   587,
+     382,   569,   385,   567,   568,   514,   523,   353,   385,   409,
+     506,   507,   385,   513,   351,   359,   515,   353,   541,   566,
+     498,   497,   499,   385,   385,   349,   358,   515,   353,   356,
+     359,   492,   329,   330,   348,   349,   360,   361,   362,   363,
+     381,   382,   383,   384,   385,   414,   415,   416,   417,   418,
+     419,   420,   421,   459,   460,   461,   463,   464,   465,   466,
+     467,   468,   469,   470,   471,   512,   514,   518,   515,   350,
+     385,   359,   358,   356,   350,   356,   350,   356,   358,   356,
+     356,   356,   350,   356,   356,   356,   356,   356,   356,   356,
+     350,   356,   350,   356,   349,   352,   356,   359,   509,   514,
+     524,   525,   522,   358,   350,   356,   350,   356,   352,   470,
+     472,   473,   474,   475,   476,   477,   478,   479,   480,   481,
+     482,   483,   351,   359,   353,   354,   359,   393,   394,   395,
+     396,   398,   399,   400,   401,   402,   403,   404,   405,   406,
+     407,   423,   470,   483,   485,   487,   489,   493,   512,   514,
+     530,   531,   532,   533,   534,   542,   543,   544,   545,   548,
+     549,   552,   553,   554,   561,   566,   515,   358,   515,   353,
+     485,   528,   358,   491,   385,   356,   359,   470,   470,   487,
+     329,   330,   351,   355,   350,   350,   356,   392,   485,   349,
+     470,   356,   368,   566,   348,   351,   382,   570,   587,   385,
+     588,   348,   381,   382,   383,   384,   574,   575,   382,   483,
+     488,   576,   382,   381,   382,   383,   384,   579,   580,   382,
+     488,   581,   382,   348,   582,   382,   587,   385,   488,   584,
+     585,   382,   488,   352,   568,   514,   385,   526,   527,   354,
+     525,   524,   488,   507,   385,   364,   365,   366,   361,   363,
+     327,   328,   331,   332,   367,   368,   333,   334,   371,   370,
+     369,   335,   337,   336,   372,   352,   352,   483,   354,   535,
+     349,   359,   359,   556,   349,   349,   359,   359,   487,   349,
+     487,   357,   359,   359,   359,   359,   338,   339,   340,   341,
+     342,   343,   344,   345,   346,   347,   358,   486,   356,   359,
+     354,   531,   545,   549,   554,   528,   358,   354,   528,   529,
+     528,   524,   385,   350,   462,   487,   385,   485,   470,   348,
+     382,   571,   572,   350,   358,   350,   356,   350,   356,   350,
+     356,   356,   350,   356,   350,   356,   350,   356,   356,   350,
+     356,   356,   350,   356,   350,   356,   350,   350,   526,   515,
+     356,   359,   354,   470,   470,   470,   472,   472,   473,   473,
+     474,   474,   474,   474,   475,   475,   476,   477,   478,   479,
+     480,   481,   484,   352,   542,   555,   531,   557,   487,   359,
+     487,   357,   485,   485,   528,   354,   356,   354,   352,   352,
+     356,   352,   356,   575,   574,   488,   576,   580,   579,   488,
+     581,   348,   582,   584,   585,   359,   527,   487,   536,   487,
+     502,   547,   393,   530,   543,   558,   350,   350,   354,   528,
+     348,   382,   350,   350,   350,   350,   350,   350,   357,   354,
+     385,   350,   349,   547,   559,   560,   538,   539,   540,   546,
+     550,   485,   358,   532,   537,   541,   487,   359,   350,   397,
+     534,   532,   353,   528,   350,   487,   537,   538,   542,   551,
+     359,   354
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_int16 yyr1[] =
 {
-       0,   455,   456,   457,   457,   457,   457,   457,   457,   457,
-     457,   457,   457,   457,   457,   457,   457,   457,   458,   458,
-     458,   458,   458,   458,   459,   460,   461,   462,   462,   463,
-     463,   464,   464,   465,   466,   466,   466,   467,   467,   467,
-     467,   468,   468,   468,   468,   469,   469,   469,   469,   470,
-     470,   470,   471,   471,   471,   472,   472,   472,   472,   472,
-     473,   473,   473,   474,   474,   475,   475,   476,   476,   477,
-     477,   478,   478,   479,   479,   480,   481,   480,   482,   482,
-     483,   483,   483,   483,   483,   483,   483,   483,   483,   483,
-     483,   484,   484,   485,   486,   486,   486,   486,   486,   486,
-     486,   486,   486,   486,   486,   488,   487,   489,   489,   490,
-     490,   490,   490,   491,   491,   492,   492,   493,   494,   494,
-     495,   495,   495,   495,   496,   497,   497,   497,   497,   497,
-     498,   498,   498,   498,   498,   499,   499,   500,   501,   501,
-     501,   501,   501,   501,   501,   501,   502,   503,   503,   504,
-     504,   504,   505,   506,   506,   507,   507,   507,   507,   507,
-     507,   507,   507,   507,   507,   507,   508,   508,   508,   508,
-     508,   508,   508,   508,   508,   508,   508,   508,   508,   508,
-     508,   508,   508,   508,   508,   508,   508,   508,   508,   508,
-     508,   508,   508,   508,   508,   508,   508,   508,   508,   508,
-     508,   509,   510,   510,   511,   511,   512,   512,   512,   512,
-     513,   513,   514,   515,   515,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
-     517,   517,   517,   519,   518,   520,   518,   521,   521,   522,
-     522,   523,   523,   524,   524,   525,   525,   525,   525,   526,
-     526,   527,   528,   528,   529,   529,   529,   529,   529,   529,
-     529,   529,   530,   531,   532,   533,   531,   534,   534,   536,
-     535,   537,   535,   538,   538,   539,   539,   540,   540,   541,
-     541,   542,   543,   543,   544,   544,   545,   545,   547,   546,
-     548,   548,   549,   549,   550,   550,   552,   551,   553,   551,
-     554,   551,   555,   555,   556,   556,   557,   557,   558,   558,
-     558,   558,   558,   558,   558,   558,   559,   559,   560,   560,
-     560,   562,   561,   563,   564,   564,   565,   565,   566,   566,
-     567,   567,   568,   568,   569,   569,   570,   570,   570,   570,
-     570,   570,   571,   571,   572,   572,   572,   572,   572,   573,
-     573,   574,   574,   575,   575,   575,   575,   575,   575,   575,
-     575,   576,   576,   577,   577,   577,   577,   578,   578,   579,
-     579,   580,   580,   580,   580,   581,   581,   582,   583,   583,
-     584,   584,   585,   585
+       0,   458,   459,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   460,   460,   460,   461,   461,
+     461,   461,   461,   461,   462,   463,   464,   465,   465,   466,
+     466,   467,   467,   468,   469,   469,   469,   470,   470,   470,
+     470,   471,   471,   471,   471,   472,   472,   472,   472,   473,
+     473,   473,   474,   474,   474,   475,   475,   475,   475,   475,
+     476,   476,   476,   477,   477,   478,   478,   479,   479,   480,
+     480,   481,   481,   482,   482,   483,   484,   483,   485,   485,
+     486,   486,   486,   486,   486,   486,   486,   486,   486,   486,
+     486,   487,   487,   488,   489,   489,   489,   489,   489,   489,
+     489,   489,   489,   489,   489,   491,   490,   492,   492,   493,
+     493,   493,   493,   494,   494,   495,   495,   496,   497,   497,
+     498,   498,   498,   498,   499,   500,   500,   500,   500,   500,
+     501,   501,   501,   501,   501,   502,   502,   503,   504,   504,
+     504,   504,   504,   504,   504,   504,   504,   504,   505,   506,
+     506,   507,   507,   507,   508,   509,   509,   510,   510,   510,
+     510,   510,   510,   510,   510,   510,   510,   510,   511,   511,
+     511,   511,   511,   511,   511,   511,   511,   511,   511,   511,
+     511,   511,   511,   511,   511,   511,   511,   511,   511,   511,
+     511,   511,   511,   511,   511,   511,   511,   511,   511,   511,
+     511,   511,   511,   511,   512,   513,   513,   514,   514,   515,
+     515,   515,   515,   516,   516,   517,   518,   518,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   520,   520,   520,   522,   521,   523,   521,
+     524,   524,   525,   525,   526,   526,   527,   527,   528,   528,
+     528,   528,   529,   529,   530,   531,   531,   532,   532,   532,
+     532,   532,   532,   532,   532,   533,   534,   535,   536,   534,
+     537,   537,   539,   538,   540,   538,   541,   541,   542,   542,
+     543,   543,   544,   544,   545,   546,   546,   547,   547,   548,
+     548,   550,   549,   551,   551,   552,   552,   553,   553,   555,
+     554,   556,   554,   557,   554,   558,   558,   559,   559,   560,
+     560,   561,   561,   561,   561,   561,   561,   561,   561,   562,
+     562,   563,   563,   563,   565,   564,   566,   567,   567,   568,
+     568,   569,   569,   570,   570,   571,   571,   572,   572,   573,
+     573,   573,   573,   573,   573,   574,   574,   575,   575,   575,
+     575,   575,   576,   576,   577,   577,   578,   578,   578,   578,
+     578,   578,   578,   578,   579,   579,   580,   580,   580,   580,
+     581,   581,   582,   582,   583,   583,   583,   583,   584,   584,
+     585,   586,   586,   587,   587,   588,   588
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -4373,14 +4391,14 @@
        3,     3,     4,     1,     1,     2,     3,     3,     2,     3,
        2,     1,     2,     1,     1,     1,     3,     4,     6,     5,
        1,     2,     3,     5,     4,     1,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     4,     1,     3,     1,
-       3,     1,     1,     1,     2,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     4,     1,
+       3,     1,     3,     1,     1,     1,     2,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       4,     1,     1,     3,     2,     3,     2,     3,     3,     4,
-       1,     0,     3,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     4,     1,     1,     1,     3,     2,     3,     2,
+       3,     3,     4,     1,     0,     3,     1,     3,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -4412,22 +4430,22 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     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,
-       3,     6,     8,     4,     6,     1,     3,     1,     4,     6,
-       1,     3,     3,     3
+       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,     3,     6,     8,     4,     6,     1,     3,
+       1,     4,     6,     1,     3,     3,     3
 };
 
 
@@ -5177,7 +5195,7 @@
                  {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 5181 "MachineIndependent/glslang_tab.cpp"
+#line 5199 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 3: /* primary_expression: variable_identifier  */
@@ -5185,7 +5203,7 @@
                           {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5189 "MachineIndependent/glslang_tab.cpp"
+#line 5207 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN  */
@@ -5195,7 +5213,7 @@
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 5199 "MachineIndependent/glslang_tab.cpp"
+#line 5217 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 5: /* primary_expression: FLOATCONSTANT  */
@@ -5203,7 +5221,7 @@
                     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 5207 "MachineIndependent/glslang_tab.cpp"
+#line 5225 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 6: /* primary_expression: INTCONSTANT  */
@@ -5211,7 +5229,7 @@
                   {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 5215 "MachineIndependent/glslang_tab.cpp"
+#line 5233 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 7: /* primary_expression: UINTCONSTANT  */
@@ -5220,7 +5238,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 5224 "MachineIndependent/glslang_tab.cpp"
+#line 5242 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 8: /* primary_expression: BOOLCONSTANT  */
@@ -5228,7 +5246,7 @@
                    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 5232 "MachineIndependent/glslang_tab.cpp"
+#line 5250 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 9: /* primary_expression: STRING_LITERAL  */
@@ -5236,7 +5254,7 @@
                      {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 5240 "MachineIndependent/glslang_tab.cpp"
+#line 5258 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 10: /* primary_expression: INT32CONSTANT  */
@@ -5245,7 +5263,7 @@
         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 5249 "MachineIndependent/glslang_tab.cpp"
+#line 5267 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 11: /* primary_expression: UINT32CONSTANT  */
@@ -5254,7 +5272,7 @@
         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 5258 "MachineIndependent/glslang_tab.cpp"
+#line 5276 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 12: /* primary_expression: INT64CONSTANT  */
@@ -5263,7 +5281,7 @@
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 5267 "MachineIndependent/glslang_tab.cpp"
+#line 5285 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 13: /* primary_expression: UINT64CONSTANT  */
@@ -5272,7 +5290,7 @@
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 5276 "MachineIndependent/glslang_tab.cpp"
+#line 5294 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 14: /* primary_expression: INT16CONSTANT  */
@@ -5281,7 +5299,7 @@
         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 5285 "MachineIndependent/glslang_tab.cpp"
+#line 5303 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 15: /* primary_expression: UINT16CONSTANT  */
@@ -5290,7 +5308,7 @@
         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 5294 "MachineIndependent/glslang_tab.cpp"
+#line 5312 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 16: /* primary_expression: DOUBLECONSTANT  */
@@ -5301,7 +5319,7 @@
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 5305 "MachineIndependent/glslang_tab.cpp"
+#line 5323 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 17: /* primary_expression: FLOAT16CONSTANT  */
@@ -5310,7 +5328,7 @@
         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 5314 "MachineIndependent/glslang_tab.cpp"
+#line 5332 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 18: /* postfix_expression: primary_expression  */
@@ -5318,7 +5336,7 @@
                          {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5322 "MachineIndependent/glslang_tab.cpp"
+#line 5340 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET  */
@@ -5326,7 +5344,7 @@
                                                                        {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5330 "MachineIndependent/glslang_tab.cpp"
+#line 5348 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 20: /* postfix_expression: function_call  */
@@ -5334,7 +5352,7 @@
                     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5338 "MachineIndependent/glslang_tab.cpp"
+#line 5356 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER  */
@@ -5342,7 +5360,7 @@
                                         {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 5346 "MachineIndependent/glslang_tab.cpp"
+#line 5364 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 22: /* postfix_expression: postfix_expression INC_OP  */
@@ -5352,7 +5370,7 @@
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5356 "MachineIndependent/glslang_tab.cpp"
+#line 5374 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 23: /* postfix_expression: postfix_expression DEC_OP  */
@@ -5362,7 +5380,7 @@
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5366 "MachineIndependent/glslang_tab.cpp"
+#line 5384 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 24: /* integer_expression: expression  */
@@ -5371,7 +5389,7 @@
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5375 "MachineIndependent/glslang_tab.cpp"
+#line 5393 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 25: /* function_call: function_call_or_method  */
@@ -5380,7 +5398,7 @@
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 5384 "MachineIndependent/glslang_tab.cpp"
+#line 5402 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 26: /* function_call_or_method: function_call_generic  */
@@ -5388,7 +5406,7 @@
                             {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5392 "MachineIndependent/glslang_tab.cpp"
+#line 5410 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN  */
@@ -5397,7 +5415,7 @@
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5401 "MachineIndependent/glslang_tab.cpp"
+#line 5419 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN  */
@@ -5406,7 +5424,7 @@
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5410 "MachineIndependent/glslang_tab.cpp"
+#line 5428 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 29: /* function_call_header_no_parameters: function_call_header VOID  */
@@ -5414,7 +5432,7 @@
                                 {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 5418 "MachineIndependent/glslang_tab.cpp"
+#line 5436 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 30: /* function_call_header_no_parameters: function_call_header  */
@@ -5422,7 +5440,7 @@
                            {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5426 "MachineIndependent/glslang_tab.cpp"
+#line 5444 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 31: /* function_call_header_with_parameters: function_call_header assignment_expression  */
@@ -5434,7 +5452,7 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5438 "MachineIndependent/glslang_tab.cpp"
+#line 5456 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression  */
@@ -5446,7 +5464,7 @@
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 5450 "MachineIndependent/glslang_tab.cpp"
+#line 5468 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 33: /* function_call_header: function_identifier LEFT_PAREN  */
@@ -5454,7 +5472,7 @@
                                      {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 5458 "MachineIndependent/glslang_tab.cpp"
+#line 5476 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 34: /* function_identifier: type_specifier  */
@@ -5464,7 +5482,7 @@
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 5468 "MachineIndependent/glslang_tab.cpp"
+#line 5486 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 35: /* function_identifier: postfix_expression  */
@@ -5496,7 +5514,7 @@
             (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 5500 "MachineIndependent/glslang_tab.cpp"
+#line 5518 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 36: /* function_identifier: non_uniform_qualifier  */
@@ -5506,7 +5524,7 @@
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 5510 "MachineIndependent/glslang_tab.cpp"
+#line 5528 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 37: /* unary_expression: postfix_expression  */
@@ -5517,7 +5535,7 @@
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 5521 "MachineIndependent/glslang_tab.cpp"
+#line 5539 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 38: /* unary_expression: INC_OP unary_expression  */
@@ -5526,7 +5544,7 @@
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5530 "MachineIndependent/glslang_tab.cpp"
+#line 5548 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 39: /* unary_expression: DEC_OP unary_expression  */
@@ -5535,7 +5553,7 @@
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5539 "MachineIndependent/glslang_tab.cpp"
+#line 5557 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 40: /* unary_expression: unary_operator unary_expression  */
@@ -5556,38 +5574,38 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 5560 "MachineIndependent/glslang_tab.cpp"
+#line 5578 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 41: /* unary_operator: PLUS  */
 #line 627 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 5566 "MachineIndependent/glslang_tab.cpp"
+#line 5584 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 42: /* unary_operator: DASH  */
 #line 628 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 5572 "MachineIndependent/glslang_tab.cpp"
+#line 5590 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 43: /* unary_operator: BANG  */
 #line 629 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 5578 "MachineIndependent/glslang_tab.cpp"
+#line 5596 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 44: /* unary_operator: TILDE  */
 #line 630 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 5585 "MachineIndependent/glslang_tab.cpp"
+#line 5603 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 45: /* multiplicative_expression: unary_expression  */
 #line 636 "MachineIndependent/glslang.y"
                        { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5591 "MachineIndependent/glslang_tab.cpp"
+#line 5609 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression  */
@@ -5597,7 +5615,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5601 "MachineIndependent/glslang_tab.cpp"
+#line 5619 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression  */
@@ -5607,7 +5625,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5611 "MachineIndependent/glslang_tab.cpp"
+#line 5629 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression  */
@@ -5618,13 +5636,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5622 "MachineIndependent/glslang_tab.cpp"
+#line 5640 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 49: /* additive_expression: multiplicative_expression  */
 #line 656 "MachineIndependent/glslang.y"
                                 { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5628 "MachineIndependent/glslang_tab.cpp"
+#line 5646 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 50: /* additive_expression: additive_expression PLUS multiplicative_expression  */
@@ -5634,7 +5652,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5638 "MachineIndependent/glslang_tab.cpp"
+#line 5656 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 51: /* additive_expression: additive_expression DASH multiplicative_expression  */
@@ -5644,13 +5662,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5648 "MachineIndependent/glslang_tab.cpp"
+#line 5666 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 52: /* shift_expression: additive_expression  */
 #line 670 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5654 "MachineIndependent/glslang_tab.cpp"
+#line 5672 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 53: /* shift_expression: shift_expression LEFT_OP additive_expression  */
@@ -5661,7 +5679,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5665 "MachineIndependent/glslang_tab.cpp"
+#line 5683 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression  */
@@ -5672,13 +5690,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5676 "MachineIndependent/glslang_tab.cpp"
+#line 5694 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 55: /* relational_expression: shift_expression  */
 #line 686 "MachineIndependent/glslang.y"
                        { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5682 "MachineIndependent/glslang_tab.cpp"
+#line 5700 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression  */
@@ -5688,7 +5706,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5692 "MachineIndependent/glslang_tab.cpp"
+#line 5710 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression  */
@@ -5698,7 +5716,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5702 "MachineIndependent/glslang_tab.cpp"
+#line 5720 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 58: /* relational_expression: relational_expression LE_OP shift_expression  */
@@ -5708,7 +5726,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5712 "MachineIndependent/glslang_tab.cpp"
+#line 5730 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 59: /* relational_expression: relational_expression GE_OP shift_expression  */
@@ -5718,13 +5736,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5722 "MachineIndependent/glslang_tab.cpp"
+#line 5740 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 60: /* equality_expression: relational_expression  */
 #line 710 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5728 "MachineIndependent/glslang_tab.cpp"
+#line 5746 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 61: /* equality_expression: equality_expression EQ_OP relational_expression  */
@@ -5738,7 +5756,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5742 "MachineIndependent/glslang_tab.cpp"
+#line 5760 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 62: /* equality_expression: equality_expression NE_OP relational_expression  */
@@ -5752,13 +5770,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5756 "MachineIndependent/glslang_tab.cpp"
+#line 5774 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 63: /* and_expression: equality_expression  */
 #line 732 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5762 "MachineIndependent/glslang_tab.cpp"
+#line 5780 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 64: /* and_expression: and_expression AMPERSAND equality_expression  */
@@ -5769,13 +5787,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5773 "MachineIndependent/glslang_tab.cpp"
+#line 5791 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 65: /* exclusive_or_expression: and_expression  */
 #line 742 "MachineIndependent/glslang.y"
                      { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5779 "MachineIndependent/glslang_tab.cpp"
+#line 5797 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression  */
@@ -5786,13 +5804,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5790 "MachineIndependent/glslang_tab.cpp"
+#line 5808 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 67: /* inclusive_or_expression: exclusive_or_expression  */
 #line 752 "MachineIndependent/glslang.y"
                               { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5796 "MachineIndependent/glslang_tab.cpp"
+#line 5814 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression  */
@@ -5803,13 +5821,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5807 "MachineIndependent/glslang_tab.cpp"
+#line 5825 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 69: /* logical_and_expression: inclusive_or_expression  */
 #line 762 "MachineIndependent/glslang.y"
                               { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5813 "MachineIndependent/glslang_tab.cpp"
+#line 5831 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression  */
@@ -5819,13 +5837,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5823 "MachineIndependent/glslang_tab.cpp"
+#line 5841 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 71: /* logical_xor_expression: logical_and_expression  */
 #line 771 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5829 "MachineIndependent/glslang_tab.cpp"
+#line 5847 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression  */
@@ -5835,13 +5853,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5839 "MachineIndependent/glslang_tab.cpp"
+#line 5857 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 73: /* logical_or_expression: logical_xor_expression  */
 #line 780 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5845 "MachineIndependent/glslang_tab.cpp"
+#line 5863 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression  */
@@ -5851,13 +5869,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5855 "MachineIndependent/glslang_tab.cpp"
+#line 5873 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 75: /* conditional_expression: logical_or_expression  */
 #line 789 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5861 "MachineIndependent/glslang_tab.cpp"
+#line 5879 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 76: /* $@1: %empty  */
@@ -5865,7 +5883,7 @@
                                      {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 5869 "MachineIndependent/glslang_tab.cpp"
+#line 5887 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression  */
@@ -5878,17 +5896,17 @@
         parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[-5].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-4].lex).loc);
         if ((yyval.interm.intermTypedNode) == 0) {
-            parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
+            parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 5886 "MachineIndependent/glslang_tab.cpp"
+#line 5904 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 78: /* assignment_expression: conditional_expression  */
 #line 808 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5892 "MachineIndependent/glslang_tab.cpp"
+#line 5910 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression  */
@@ -5902,11 +5920,11 @@
         parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.addAssign((yyvsp[-1].interm).loc, (yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0) {
-            parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
+            parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 5910 "MachineIndependent/glslang_tab.cpp"
+#line 5928 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 80: /* assignment_operator: EQUAL  */
@@ -5915,7 +5933,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 5919 "MachineIndependent/glslang_tab.cpp"
+#line 5937 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 81: /* assignment_operator: MUL_ASSIGN  */
@@ -5924,7 +5942,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 5928 "MachineIndependent/glslang_tab.cpp"
+#line 5946 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 82: /* assignment_operator: DIV_ASSIGN  */
@@ -5933,7 +5951,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 5937 "MachineIndependent/glslang_tab.cpp"
+#line 5955 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 83: /* assignment_operator: MOD_ASSIGN  */
@@ -5943,7 +5961,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 5947 "MachineIndependent/glslang_tab.cpp"
+#line 5965 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 84: /* assignment_operator: ADD_ASSIGN  */
@@ -5952,7 +5970,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 5956 "MachineIndependent/glslang_tab.cpp"
+#line 5974 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 85: /* assignment_operator: SUB_ASSIGN  */
@@ -5961,7 +5979,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 5965 "MachineIndependent/glslang_tab.cpp"
+#line 5983 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 86: /* assignment_operator: LEFT_ASSIGN  */
@@ -5970,7 +5988,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 5974 "MachineIndependent/glslang_tab.cpp"
+#line 5992 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 87: /* assignment_operator: RIGHT_ASSIGN  */
@@ -5979,7 +5997,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 5983 "MachineIndependent/glslang_tab.cpp"
+#line 6001 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 88: /* assignment_operator: AND_ASSIGN  */
@@ -5988,7 +6006,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 5992 "MachineIndependent/glslang_tab.cpp"
+#line 6010 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 89: /* assignment_operator: XOR_ASSIGN  */
@@ -5997,7 +6015,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 6001 "MachineIndependent/glslang_tab.cpp"
+#line 6019 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 90: /* assignment_operator: OR_ASSIGN  */
@@ -6006,7 +6024,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 6010 "MachineIndependent/glslang_tab.cpp"
+#line 6028 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 91: /* expression: assignment_expression  */
@@ -6014,7 +6032,7 @@
                             {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 6018 "MachineIndependent/glslang_tab.cpp"
+#line 6036 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 92: /* expression: expression COMMA assignment_expression  */
@@ -6023,11 +6041,11 @@
         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);
         if ((yyval.interm.intermTypedNode) == 0) {
-            parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString());
+            parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 6031 "MachineIndependent/glslang_tab.cpp"
+#line 6049 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 93: /* constant_expression: conditional_expression  */
@@ -6036,7 +6054,7 @@
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 6040 "MachineIndependent/glslang_tab.cpp"
+#line 6058 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 94: /* declaration: function_prototype SEMICOLON  */
@@ -6046,7 +6064,7 @@
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 6050 "MachineIndependent/glslang_tab.cpp"
+#line 6068 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 95: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON  */
@@ -6058,7 +6076,7 @@
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 6062 "MachineIndependent/glslang_tab.cpp"
+#line 6080 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 96: /* declaration: spirv_execution_mode_qualifier SEMICOLON  */
@@ -6068,7 +6086,7 @@
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier");
         (yyval.interm.intermNode) = 0;
     }
-#line 6072 "MachineIndependent/glslang_tab.cpp"
+#line 6090 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 97: /* declaration: init_declarator_list SEMICOLON  */
@@ -6078,7 +6096,7 @@
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 6082 "MachineIndependent/glslang_tab.cpp"
+#line 6100 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 98: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON  */
@@ -6090,7 +6108,7 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 6094 "MachineIndependent/glslang_tab.cpp"
+#line 6112 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 99: /* declaration: block_structure SEMICOLON  */
@@ -6099,7 +6117,7 @@
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 6103 "MachineIndependent/glslang_tab.cpp"
+#line 6121 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 100: /* declaration: block_structure IDENTIFIER SEMICOLON  */
@@ -6108,7 +6126,7 @@
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 6112 "MachineIndependent/glslang_tab.cpp"
+#line 6130 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 101: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON  */
@@ -6117,7 +6135,7 @@
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 6121 "MachineIndependent/glslang_tab.cpp"
+#line 6139 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 102: /* declaration: type_qualifier SEMICOLON  */
@@ -6127,7 +6145,7 @@
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 6131 "MachineIndependent/glslang_tab.cpp"
+#line 6149 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 103: /* declaration: type_qualifier IDENTIFIER SEMICOLON  */
@@ -6137,7 +6155,7 @@
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 6141 "MachineIndependent/glslang_tab.cpp"
+#line 6159 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 104: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON  */
@@ -6148,13 +6166,13 @@
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 6152 "MachineIndependent/glslang_tab.cpp"
+#line 6170 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 105: /* $@2: %empty  */
 #line 956 "MachineIndependent/glslang.y"
                                            { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 6158 "MachineIndependent/glslang_tab.cpp"
+#line 6176 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE  */
@@ -6168,7 +6186,7 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 6172 "MachineIndependent/glslang_tab.cpp"
+#line 6190 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 107: /* identifier_list: COMMA IDENTIFIER  */
@@ -6177,7 +6195,7 @@
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 6181 "MachineIndependent/glslang_tab.cpp"
+#line 6199 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 108: /* identifier_list: identifier_list COMMA IDENTIFIER  */
@@ -6186,7 +6204,7 @@
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 6190 "MachineIndependent/glslang_tab.cpp"
+#line 6208 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 109: /* function_prototype: function_declarator RIGHT_PAREN  */
@@ -6195,7 +6213,7 @@
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 6199 "MachineIndependent/glslang_tab.cpp"
+#line 6217 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute  */
@@ -6206,7 +6224,7 @@
         parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
     }
-#line 6210 "MachineIndependent/glslang_tab.cpp"
+#line 6228 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN  */
@@ -6217,7 +6235,7 @@
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
         parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes));
     }
-#line 6221 "MachineIndependent/glslang_tab.cpp"
+#line 6239 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute  */
@@ -6229,7 +6247,7 @@
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes));
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
     }
-#line 6233 "MachineIndependent/glslang_tab.cpp"
+#line 6251 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 113: /* function_declarator: function_header  */
@@ -6237,7 +6255,7 @@
                       {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 6241 "MachineIndependent/glslang_tab.cpp"
+#line 6259 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 114: /* function_declarator: function_header_with_parameters  */
@@ -6245,7 +6263,7 @@
                                       {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 6249 "MachineIndependent/glslang_tab.cpp"
+#line 6267 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 115: /* function_header_with_parameters: function_header parameter_declaration  */
@@ -6258,7 +6276,7 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 6262 "MachineIndependent/glslang_tab.cpp"
+#line 6280 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration  */
@@ -6280,7 +6298,7 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 6284 "MachineIndependent/glslang_tab.cpp"
+#line 6302 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 117: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN  */
@@ -6304,7 +6322,7 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 6308 "MachineIndependent/glslang_tab.cpp"
+#line 6326 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 118: /* parameter_declarator: type_specifier IDENTIFIER  */
@@ -6324,7 +6342,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 6328 "MachineIndependent/glslang_tab.cpp"
+#line 6346 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 119: /* parameter_declarator: type_specifier IDENTIFIER array_specifier  */
@@ -6348,7 +6366,7 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 6352 "MachineIndependent/glslang_tab.cpp"
+#line 6370 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 120: /* parameter_declaration: type_qualifier parameter_declarator  */
@@ -6364,7 +6382,7 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 6368 "MachineIndependent/glslang_tab.cpp"
+#line 6386 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 121: /* parameter_declaration: parameter_declarator  */
@@ -6376,7 +6394,7 @@
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 6380 "MachineIndependent/glslang_tab.cpp"
+#line 6398 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 122: /* parameter_declaration: type_qualifier parameter_type_specifier  */
@@ -6391,7 +6409,7 @@
         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 6395 "MachineIndependent/glslang_tab.cpp"
+#line 6413 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 123: /* parameter_declaration: parameter_type_specifier  */
@@ -6403,7 +6421,7 @@
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 6407 "MachineIndependent/glslang_tab.cpp"
+#line 6425 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 124: /* parameter_type_specifier: type_specifier  */
@@ -6414,7 +6432,7 @@
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 6418 "MachineIndependent/glslang_tab.cpp"
+#line 6436 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 125: /* init_declarator_list: single_declaration  */
@@ -6422,7 +6440,7 @@
                          {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 6426 "MachineIndependent/glslang_tab.cpp"
+#line 6444 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER  */
@@ -6431,7 +6449,7 @@
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 6435 "MachineIndependent/glslang_tab.cpp"
+#line 6453 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier  */
@@ -6440,7 +6458,7 @@
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 6444 "MachineIndependent/glslang_tab.cpp"
+#line 6462 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer  */
@@ -6450,7 +6468,7 @@
         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 6454 "MachineIndependent/glslang_tab.cpp"
+#line 6472 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer  */
@@ -6460,7 +6478,7 @@
         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 6464 "MachineIndependent/glslang_tab.cpp"
+#line 6482 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 130: /* single_declaration: fully_specified_type  */
@@ -6472,7 +6490,7 @@
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
 
     }
-#line 6476 "MachineIndependent/glslang_tab.cpp"
+#line 6494 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 131: /* single_declaration: fully_specified_type IDENTIFIER  */
@@ -6482,7 +6500,7 @@
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 6486 "MachineIndependent/glslang_tab.cpp"
+#line 6504 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 132: /* single_declaration: fully_specified_type IDENTIFIER array_specifier  */
@@ -6492,7 +6510,7 @@
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 6496 "MachineIndependent/glslang_tab.cpp"
+#line 6514 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 133: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer  */
@@ -6502,7 +6520,7 @@
         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 6506 "MachineIndependent/glslang_tab.cpp"
+#line 6524 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 134: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer  */
@@ -6512,7 +6530,7 @@
         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 6516 "MachineIndependent/glslang_tab.cpp"
+#line 6534 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 135: /* fully_specified_type: type_specifier  */
@@ -6527,7 +6545,7 @@
         }
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 6531 "MachineIndependent/glslang_tab.cpp"
+#line 6549 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 136: /* fully_specified_type: type_qualifier type_specifier  */
@@ -6556,7 +6574,7 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 6560 "MachineIndependent/glslang_tab.cpp"
+#line 6578 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 137: /* invariant_qualifier: INVARIANT  */
@@ -6567,7 +6585,7 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 6571 "MachineIndependent/glslang_tab.cpp"
+#line 6589 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 138: /* interpolation_qualifier: SMOOTH  */
@@ -6579,7 +6597,7 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 6583 "MachineIndependent/glslang_tab.cpp"
+#line 6601 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 139: /* interpolation_qualifier: FLAT  */
@@ -6591,7 +6609,7 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 6595 "MachineIndependent/glslang_tab.cpp"
+#line 6613 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 140: /* interpolation_qualifier: NOPERSPECTIVE  */
@@ -6603,7 +6621,7 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 6607 "MachineIndependent/glslang_tab.cpp"
+#line 6625 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 141: /* interpolation_qualifier: EXPLICITINTERPAMD  */
@@ -6615,7 +6633,7 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.explicitInterp = true;
     }
-#line 6619 "MachineIndependent/glslang_tab.cpp"
+#line 6637 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 142: /* interpolation_qualifier: PERVERTEXNV  */
@@ -6628,123 +6646,151 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexNV = true;
     }
-#line 6632 "MachineIndependent/glslang_tab.cpp"
+#line 6650 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 143: /* interpolation_qualifier: PERPRIMITIVENV  */
+  case 143: /* interpolation_qualifier: PERVERTEXEXT  */
 #line 1293 "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");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.pervertexEXT = true;
+    }
+#line 6663 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 144: /* interpolation_qualifier: PERPRIMITIVENV  */
+#line 1301 "MachineIndependent/glslang.y"
                      {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV");
         // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
         if (parseContext.language == EShLangFragment)
             parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 6647 "MachineIndependent/glslang_tab.cpp"
+#line 6678 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 144: /* interpolation_qualifier: PERVIEWNV  */
-#line 1303 "MachineIndependent/glslang.y"
+  case 145: /* interpolation_qualifier: PERPRIMITIVEEXT  */
+#line 1311 "MachineIndependent/glslang.y"
+                      {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT");
+        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
+        if (parseContext.language == EShLangFragment)
+            parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.perPrimitiveNV = true;
+    }
+#line 6693 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 146: /* interpolation_qualifier: PERVIEWNV  */
+#line 1321 "MachineIndependent/glslang.y"
                 {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangMeshNV, "perviewNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, EShLangMesh, "perviewNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perViewNV = true;
     }
-#line 6659 "MachineIndependent/glslang_tab.cpp"
+#line 6705 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 145: /* interpolation_qualifier: PERTASKNV  */
-#line 1310 "MachineIndependent/glslang.y"
+  case 147: /* interpolation_qualifier: PERTASKNV  */
+#line 1328 "MachineIndependent/glslang.y"
                 {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perTaskNV = true;
     }
-#line 6671 "MachineIndependent/glslang_tab.cpp"
+#line 6717 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 146: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
-#line 1321 "MachineIndependent/glslang.y"
+  case 148: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
+#line 1339 "MachineIndependent/glslang.y"
                                                              {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 6679 "MachineIndependent/glslang_tab.cpp"
+#line 6725 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 147: /* layout_qualifier_id_list: layout_qualifier_id  */
-#line 1327 "MachineIndependent/glslang.y"
+  case 149: /* layout_qualifier_id_list: layout_qualifier_id  */
+#line 1345 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6687 "MachineIndependent/glslang_tab.cpp"
+#line 6733 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 148: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id  */
-#line 1330 "MachineIndependent/glslang.y"
+  case 150: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id  */
+#line 1348 "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 6697 "MachineIndependent/glslang_tab.cpp"
+#line 6743 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 149: /* layout_qualifier_id: IDENTIFIER  */
-#line 1337 "MachineIndependent/glslang.y"
+  case 151: /* layout_qualifier_id: IDENTIFIER  */
+#line 1355 "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 6706 "MachineIndependent/glslang_tab.cpp"
+#line 6752 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 150: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression  */
-#line 1341 "MachineIndependent/glslang.y"
+  case 152: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression  */
+#line 1359 "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 6715 "MachineIndependent/glslang_tab.cpp"
+#line 6761 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 151: /* layout_qualifier_id: SHARED  */
-#line 1345 "MachineIndependent/glslang.y"
+  case 153: /* layout_qualifier_id: SHARED  */
+#line 1363 "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 6725 "MachineIndependent/glslang_tab.cpp"
+#line 6771 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 152: /* precise_qualifier: PRECISE  */
-#line 1354 "MachineIndependent/glslang.y"
+  case 154: /* precise_qualifier: PRECISE  */
+#line 1372 "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 6736 "MachineIndependent/glslang_tab.cpp"
+#line 6782 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 153: /* type_qualifier: single_type_qualifier  */
-#line 1364 "MachineIndependent/glslang.y"
+  case 155: /* type_qualifier: single_type_qualifier  */
+#line 1382 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6744 "MachineIndependent/glslang_tab.cpp"
+#line 6790 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 154: /* type_qualifier: type_qualifier single_type_qualifier  */
-#line 1367 "MachineIndependent/glslang.y"
+  case 156: /* type_qualifier: type_qualifier single_type_qualifier  */
+#line 1385 "MachineIndependent/glslang.y"
                                            {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -6753,151 +6799,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 6757 "MachineIndependent/glslang_tab.cpp"
+#line 6803 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 155: /* single_type_qualifier: storage_qualifier  */
-#line 1378 "MachineIndependent/glslang.y"
+  case 157: /* single_type_qualifier: storage_qualifier  */
+#line 1396 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6765 "MachineIndependent/glslang_tab.cpp"
+#line 6811 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 156: /* single_type_qualifier: layout_qualifier  */
-#line 1381 "MachineIndependent/glslang.y"
+  case 158: /* single_type_qualifier: layout_qualifier  */
+#line 1399 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6773 "MachineIndependent/glslang_tab.cpp"
+#line 6819 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 157: /* single_type_qualifier: precision_qualifier  */
-#line 1384 "MachineIndependent/glslang.y"
+  case 159: /* single_type_qualifier: precision_qualifier  */
+#line 1402 "MachineIndependent/glslang.y"
                           {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6782 "MachineIndependent/glslang_tab.cpp"
+#line 6828 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 158: /* single_type_qualifier: interpolation_qualifier  */
-#line 1388 "MachineIndependent/glslang.y"
+  case 160: /* single_type_qualifier: interpolation_qualifier  */
+#line 1406 "MachineIndependent/glslang.y"
                               {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6791 "MachineIndependent/glslang_tab.cpp"
+#line 6837 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 159: /* single_type_qualifier: invariant_qualifier  */
-#line 1392 "MachineIndependent/glslang.y"
+  case 161: /* single_type_qualifier: invariant_qualifier  */
+#line 1410 "MachineIndependent/glslang.y"
                           {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6800 "MachineIndependent/glslang_tab.cpp"
+#line 6846 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 160: /* single_type_qualifier: precise_qualifier  */
-#line 1397 "MachineIndependent/glslang.y"
+  case 162: /* single_type_qualifier: precise_qualifier  */
+#line 1415 "MachineIndependent/glslang.y"
                         {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6809 "MachineIndependent/glslang_tab.cpp"
+#line 6855 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 161: /* single_type_qualifier: non_uniform_qualifier  */
-#line 1401 "MachineIndependent/glslang.y"
+  case 163: /* single_type_qualifier: non_uniform_qualifier  */
+#line 1419 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6817 "MachineIndependent/glslang_tab.cpp"
+#line 6863 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 162: /* single_type_qualifier: spirv_storage_class_qualifier  */
-#line 1404 "MachineIndependent/glslang.y"
+  case 164: /* single_type_qualifier: spirv_storage_class_qualifier  */
+#line 1422 "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 6827 "MachineIndependent/glslang_tab.cpp"
+#line 6873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 163: /* single_type_qualifier: spirv_decorate_qualifier  */
-#line 1409 "MachineIndependent/glslang.y"
+  case 165: /* single_type_qualifier: spirv_decorate_qualifier  */
+#line 1427 "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 6836 "MachineIndependent/glslang_tab.cpp"
+#line 6882 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 164: /* single_type_qualifier: SPIRV_BY_REFERENCE  */
-#line 1413 "MachineIndependent/glslang.y"
+  case 166: /* single_type_qualifier: SPIRV_BY_REFERENCE  */
+#line 1431 "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 6846 "MachineIndependent/glslang_tab.cpp"
+#line 6892 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 165: /* single_type_qualifier: SPIRV_LITERAL  */
-#line 1418 "MachineIndependent/glslang.y"
+  case 167: /* single_type_qualifier: SPIRV_LITERAL  */
+#line 1436 "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 6856 "MachineIndependent/glslang_tab.cpp"
+#line 6902 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 166: /* storage_qualifier: CONST  */
-#line 1427 "MachineIndependent/glslang.y"
+  case 168: /* storage_qualifier: CONST  */
+#line 1445 "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 6865 "MachineIndependent/glslang_tab.cpp"
+#line 6911 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 167: /* storage_qualifier: INOUT  */
-#line 1431 "MachineIndependent/glslang.y"
+  case 169: /* storage_qualifier: INOUT  */
+#line 1449 "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 6875 "MachineIndependent/glslang_tab.cpp"
+#line 6921 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 168: /* storage_qualifier: IN  */
-#line 1436 "MachineIndependent/glslang.y"
+  case 170: /* storage_qualifier: IN  */
+#line 1454 "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 6886 "MachineIndependent/glslang_tab.cpp"
+#line 6932 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 169: /* storage_qualifier: OUT  */
-#line 1442 "MachineIndependent/glslang.y"
+  case 171: /* storage_qualifier: OUT  */
+#line 1460 "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 6897 "MachineIndependent/glslang_tab.cpp"
+#line 6943 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 170: /* storage_qualifier: CENTROID  */
-#line 1448 "MachineIndependent/glslang.y"
+  case 172: /* storage_qualifier: CENTROID  */
+#line 1466 "MachineIndependent/glslang.y"
                {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -6905,44 +6951,44 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 6909 "MachineIndependent/glslang_tab.cpp"
+#line 6955 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 171: /* storage_qualifier: UNIFORM  */
-#line 1455 "MachineIndependent/glslang.y"
+  case 173: /* storage_qualifier: UNIFORM  */
+#line 1473 "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 6919 "MachineIndependent/glslang_tab.cpp"
+#line 6965 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 172: /* storage_qualifier: SHARED  */
-#line 1460 "MachineIndependent/glslang.y"
+  case 174: /* storage_qualifier: SHARED  */
+#line 1478 "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");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 6932 "MachineIndependent/glslang_tab.cpp"
+#line 6978 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 173: /* storage_qualifier: BUFFER  */
-#line 1468 "MachineIndependent/glslang.y"
+  case 175: /* storage_qualifier: BUFFER  */
+#line 1486 "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 6942 "MachineIndependent/glslang_tab.cpp"
+#line 6988 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 174: /* storage_qualifier: ATTRIBUTE  */
-#line 1474 "MachineIndependent/glslang.y"
+  case 176: /* storage_qualifier: ATTRIBUTE  */
+#line 1492 "MachineIndependent/glslang.y"
                 {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -6955,11 +7001,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 6959 "MachineIndependent/glslang_tab.cpp"
+#line 7005 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 175: /* storage_qualifier: VARYING  */
-#line 1486 "MachineIndependent/glslang.y"
+  case 177: /* storage_qualifier: VARYING  */
+#line 1504 "MachineIndependent/glslang.y"
               {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -6974,32 +7020,32 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 6978 "MachineIndependent/glslang_tab.cpp"
+#line 7024 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 176: /* storage_qualifier: PATCH  */
-#line 1500 "MachineIndependent/glslang.y"
+  case 178: /* storage_qualifier: PATCH  */
+#line 1518 "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 6989 "MachineIndependent/glslang_tab.cpp"
+#line 7035 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 177: /* storage_qualifier: SAMPLE  */
-#line 1506 "MachineIndependent/glslang.y"
+  case 179: /* storage_qualifier: SAMPLE  */
+#line 1524 "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 6999 "MachineIndependent/glslang_tab.cpp"
+#line 7045 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 178: /* storage_qualifier: HITATTRNV  */
-#line 1511 "MachineIndependent/glslang.y"
+  case 180: /* storage_qualifier: HITATTRNV  */
+#line 1529 "MachineIndependent/glslang.y"
                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -7008,11 +7054,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 7012 "MachineIndependent/glslang_tab.cpp"
+#line 7058 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 179: /* storage_qualifier: HITATTREXT  */
-#line 1519 "MachineIndependent/glslang.y"
+  case 181: /* storage_qualifier: HITATTREXT  */
+#line 1537 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -7021,11 +7067,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 7025 "MachineIndependent/glslang_tab.cpp"
+#line 7071 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 180: /* storage_qualifier: PAYLOADNV  */
-#line 1527 "MachineIndependent/glslang.y"
+  case 182: /* storage_qualifier: PAYLOADNV  */
+#line 1545 "MachineIndependent/glslang.y"
                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
@@ -7034,11 +7080,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 7038 "MachineIndependent/glslang_tab.cpp"
+#line 7084 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 181: /* storage_qualifier: PAYLOADEXT  */
-#line 1535 "MachineIndependent/glslang.y"
+  case 183: /* storage_qualifier: PAYLOADEXT  */
+#line 1553 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
@@ -7047,11 +7093,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 7051 "MachineIndependent/glslang_tab.cpp"
+#line 7097 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 182: /* storage_qualifier: PAYLOADINNV  */
-#line 1543 "MachineIndependent/glslang.y"
+  case 184: /* storage_qualifier: PAYLOADINNV  */
+#line 1561 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
@@ -7060,11 +7106,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 7064 "MachineIndependent/glslang_tab.cpp"
+#line 7110 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 183: /* storage_qualifier: PAYLOADINEXT  */
-#line 1551 "MachineIndependent/glslang.y"
+  case 185: /* storage_qualifier: PAYLOADINEXT  */
+#line 1569 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
@@ -7073,11 +7119,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 7077 "MachineIndependent/glslang_tab.cpp"
+#line 7123 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 184: /* storage_qualifier: CALLDATANV  */
-#line 1559 "MachineIndependent/glslang.y"
+  case 186: /* storage_qualifier: CALLDATANV  */
+#line 1577 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
@@ -7086,11 +7132,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 7090 "MachineIndependent/glslang_tab.cpp"
+#line 7136 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 185: /* storage_qualifier: CALLDATAEXT  */
-#line 1567 "MachineIndependent/glslang.y"
+  case 187: /* storage_qualifier: CALLDATAEXT  */
+#line 1585 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
@@ -7099,11 +7145,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 7103 "MachineIndependent/glslang_tab.cpp"
+#line 7149 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 186: /* storage_qualifier: CALLDATAINNV  */
-#line 1575 "MachineIndependent/glslang.y"
+  case 188: /* storage_qualifier: CALLDATAINNV  */
+#line 1593 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
@@ -7111,11 +7157,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 7115 "MachineIndependent/glslang_tab.cpp"
+#line 7161 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 187: /* storage_qualifier: CALLDATAINEXT  */
-#line 1582 "MachineIndependent/glslang.y"
+  case 189: /* storage_qualifier: CALLDATAINEXT  */
+#line 1600 "MachineIndependent/glslang.y"
                     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
@@ -7123,175 +7169,187 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 7127 "MachineIndependent/glslang_tab.cpp"
+#line 7173 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 188: /* storage_qualifier: COHERENT  */
-#line 1589 "MachineIndependent/glslang.y"
+  case 190: /* storage_qualifier: COHERENT  */
+#line 1607 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 7136 "MachineIndependent/glslang_tab.cpp"
+#line 7182 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 189: /* storage_qualifier: DEVICECOHERENT  */
-#line 1593 "MachineIndependent/glslang.y"
+  case 191: /* storage_qualifier: DEVICECOHERENT  */
+#line 1611 "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 7146 "MachineIndependent/glslang_tab.cpp"
+#line 7192 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 190: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
-#line 1598 "MachineIndependent/glslang.y"
+  case 192: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
+#line 1616 "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 7156 "MachineIndependent/glslang_tab.cpp"
+#line 7202 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 191: /* storage_qualifier: WORKGROUPCOHERENT  */
-#line 1603 "MachineIndependent/glslang.y"
+  case 193: /* storage_qualifier: WORKGROUPCOHERENT  */
+#line 1621 "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 7166 "MachineIndependent/glslang_tab.cpp"
+#line 7212 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 192: /* storage_qualifier: SUBGROUPCOHERENT  */
-#line 1608 "MachineIndependent/glslang.y"
+  case 194: /* storage_qualifier: SUBGROUPCOHERENT  */
+#line 1626 "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 7176 "MachineIndependent/glslang_tab.cpp"
+#line 7222 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 193: /* storage_qualifier: NONPRIVATE  */
-#line 1613 "MachineIndependent/glslang.y"
+  case 195: /* storage_qualifier: NONPRIVATE  */
+#line 1631 "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 7186 "MachineIndependent/glslang_tab.cpp"
+#line 7232 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 194: /* storage_qualifier: SHADERCALLCOHERENT  */
-#line 1618 "MachineIndependent/glslang.y"
+  case 196: /* storage_qualifier: SHADERCALLCOHERENT  */
+#line 1636 "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 7196 "MachineIndependent/glslang_tab.cpp"
+#line 7242 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 195: /* storage_qualifier: VOLATILE  */
-#line 1623 "MachineIndependent/glslang.y"
+  case 197: /* storage_qualifier: VOLATILE  */
+#line 1641 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 7205 "MachineIndependent/glslang_tab.cpp"
+#line 7251 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 196: /* storage_qualifier: RESTRICT  */
-#line 1627 "MachineIndependent/glslang.y"
+  case 198: /* storage_qualifier: RESTRICT  */
+#line 1645 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 7214 "MachineIndependent/glslang_tab.cpp"
+#line 7260 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 197: /* storage_qualifier: READONLY  */
-#line 1631 "MachineIndependent/glslang.y"
+  case 199: /* storage_qualifier: READONLY  */
+#line 1649 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 7223 "MachineIndependent/glslang_tab.cpp"
+#line 7269 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 198: /* storage_qualifier: WRITEONLY  */
-#line 1635 "MachineIndependent/glslang.y"
+  case 200: /* storage_qualifier: WRITEONLY  */
+#line 1653 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 7232 "MachineIndependent/glslang_tab.cpp"
+#line 7278 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 199: /* storage_qualifier: SUBROUTINE  */
-#line 1639 "MachineIndependent/glslang.y"
+  case 201: /* storage_qualifier: SUBROUTINE  */
+#line 1657 "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 7243 "MachineIndependent/glslang_tab.cpp"
+#line 7289 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 200: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
-#line 1645 "MachineIndependent/glslang.y"
+  case 202: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
+#line 1663 "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 7254 "MachineIndependent/glslang_tab.cpp"
+#line 7300 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 201: /* non_uniform_qualifier: NONUNIFORM  */
-#line 1656 "MachineIndependent/glslang.y"
+  case 203: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT  */
+#line 1669 "MachineIndependent/glslang.y"
+                              {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck((yyvsp[0].lex).loc, "taskPayloadSharedEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT  ");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT;
+    }
+#line 7312 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 204: /* non_uniform_qualifier: NONUNIFORM  */
+#line 1681 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 7263 "MachineIndependent/glslang_tab.cpp"
+#line 7321 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 202: /* type_name_list: IDENTIFIER  */
-#line 1663 "MachineIndependent/glslang.y"
+  case 205: /* type_name_list: IDENTIFIER  */
+#line 1688 "MachineIndependent/glslang.y"
                  {
         // TODO
     }
-#line 7271 "MachineIndependent/glslang_tab.cpp"
+#line 7329 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 203: /* type_name_list: type_name_list COMMA IDENTIFIER  */
-#line 1666 "MachineIndependent/glslang.y"
+  case 206: /* type_name_list: type_name_list COMMA IDENTIFIER  */
+#line 1691 "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 7281 "MachineIndependent/glslang_tab.cpp"
+#line 7339 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 204: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
-#line 1675 "MachineIndependent/glslang.y"
+  case 207: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
+#line 1700 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters);
     }
-#line 7291 "MachineIndependent/glslang_tab.cpp"
+#line 7349 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 205: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
-#line 1680 "MachineIndependent/glslang.y"
+  case 208: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
+#line 1705 "MachineIndependent/glslang.y"
                                                                            {
         parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-2].interm.type);
@@ -7299,21 +7357,21 @@
         (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 7303 "MachineIndependent/glslang_tab.cpp"
+#line 7361 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 206: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
-#line 1690 "MachineIndependent/glslang.y"
+  case 209: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
+#line 1715 "MachineIndependent/glslang.y"
                                  {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 7313 "MachineIndependent/glslang_tab.cpp"
+#line 7371 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 207: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
-#line 1695 "MachineIndependent/glslang.y"
+  case 210: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
+#line 1720 "MachineIndependent/glslang.y"
                                                         {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -7322,20 +7380,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 7326 "MachineIndependent/glslang_tab.cpp"
+#line 7384 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 208: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
-#line 1703 "MachineIndependent/glslang.y"
+  case 211: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
+#line 1728 "MachineIndependent/glslang.y"
                                                  {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 7335 "MachineIndependent/glslang_tab.cpp"
+#line 7393 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 209: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
-#line 1707 "MachineIndependent/glslang.y"
+  case 212: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
+#line 1732 "MachineIndependent/glslang.y"
                                                                         {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -7343,35 +7401,35 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 7347 "MachineIndependent/glslang_tab.cpp"
+#line 7405 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 210: /* type_parameter_specifier_opt: type_parameter_specifier  */
-#line 1717 "MachineIndependent/glslang.y"
+  case 213: /* type_parameter_specifier_opt: type_parameter_specifier  */
+#line 1742 "MachineIndependent/glslang.y"
                                {
         (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
     }
-#line 7355 "MachineIndependent/glslang_tab.cpp"
+#line 7413 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 211: /* type_parameter_specifier_opt: %empty  */
-#line 1720 "MachineIndependent/glslang.y"
+  case 214: /* type_parameter_specifier_opt: %empty  */
+#line 1745 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.typeParameters) = 0;
     }
-#line 7363 "MachineIndependent/glslang_tab.cpp"
+#line 7421 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 212: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
-#line 1726 "MachineIndependent/glslang.y"
+  case 215: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
+#line 1751 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
     }
-#line 7371 "MachineIndependent/glslang_tab.cpp"
+#line 7429 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 213: /* type_parameter_specifier_list: unary_expression  */
-#line 1732 "MachineIndependent/glslang.y"
+  case 216: /* type_parameter_specifier_list: unary_expression  */
+#line 1757 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.typeParameters) = new TArraySizes;
 
@@ -7379,11 +7437,11 @@
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 7383 "MachineIndependent/glslang_tab.cpp"
+#line 7441 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 214: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
-#line 1739 "MachineIndependent/glslang.y"
+  case 217: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
+#line 1764 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
 
@@ -7391,300 +7449,300 @@
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 7395 "MachineIndependent/glslang_tab.cpp"
+#line 7453 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 215: /* type_specifier_nonarray: VOID  */
-#line 1749 "MachineIndependent/glslang.y"
+  case 218: /* type_specifier_nonarray: VOID  */
+#line 1774 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 7404 "MachineIndependent/glslang_tab.cpp"
+#line 7462 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 216: /* type_specifier_nonarray: FLOAT  */
-#line 1753 "MachineIndependent/glslang.y"
+  case 219: /* type_specifier_nonarray: FLOAT  */
+#line 1778 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 7413 "MachineIndependent/glslang_tab.cpp"
+#line 7471 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 217: /* type_specifier_nonarray: INT  */
-#line 1757 "MachineIndependent/glslang.y"
+  case 220: /* type_specifier_nonarray: INT  */
+#line 1782 "MachineIndependent/glslang.y"
           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 7422 "MachineIndependent/glslang_tab.cpp"
+#line 7480 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 218: /* type_specifier_nonarray: UINT  */
-#line 1761 "MachineIndependent/glslang.y"
+  case 221: /* type_specifier_nonarray: UINT  */
+#line 1786 "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 7432 "MachineIndependent/glslang_tab.cpp"
+#line 7490 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 219: /* type_specifier_nonarray: BOOL  */
-#line 1766 "MachineIndependent/glslang.y"
+  case 222: /* type_specifier_nonarray: BOOL  */
+#line 1791 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 7441 "MachineIndependent/glslang_tab.cpp"
+#line 7499 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 220: /* 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 7451 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 221: /* 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 7461 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 222: /* 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 7471 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 223: /* 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 7481 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 224: /* 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 7491 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 225: /* type_specifier_nonarray: BVEC4  */
+  case 223: /* type_specifier_nonarray: VEC2  */
 #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 7501 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 226: /* type_specifier_nonarray: IVEC2  */
-#line 1800 "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 7511 "MachineIndependent/glslang_tab.cpp"
+#line 7509 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 227: /* type_specifier_nonarray: IVEC3  */
-#line 1805 "MachineIndependent/glslang.y"
-            {
+  case 224: /* type_specifier_nonarray: VEC3  */
+#line 1800 "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 7521 "MachineIndependent/glslang_tab.cpp"
+#line 7519 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 228: /* type_specifier_nonarray: IVEC4  */
+  case 225: /* type_specifier_nonarray: VEC4  */
+#line 1805 "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 7529 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 226: /* type_specifier_nonarray: BVEC2  */
 #line 1810 "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 7539 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 227: /* type_specifier_nonarray: BVEC3  */
+#line 1815 "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 7549 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 228: /* type_specifier_nonarray: BVEC4  */
+#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(4);
+    }
+#line 7559 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 229: /* type_specifier_nonarray: IVEC2  */
+#line 1825 "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 7569 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 230: /* type_specifier_nonarray: IVEC3  */
+#line 1830 "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 7579 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 231: /* type_specifier_nonarray: IVEC4  */
+#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(4);
     }
-#line 7531 "MachineIndependent/glslang_tab.cpp"
+#line 7589 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 229: /* type_specifier_nonarray: UVEC2  */
-#line 1815 "MachineIndependent/glslang.y"
+  case 232: /* type_specifier_nonarray: UVEC2  */
+#line 1840 "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 7542 "MachineIndependent/glslang_tab.cpp"
+#line 7600 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 230: /* type_specifier_nonarray: UVEC3  */
-#line 1821 "MachineIndependent/glslang.y"
+  case 233: /* type_specifier_nonarray: UVEC3  */
+#line 1846 "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 7553 "MachineIndependent/glslang_tab.cpp"
+#line 7611 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 231: /* type_specifier_nonarray: UVEC4  */
-#line 1827 "MachineIndependent/glslang.y"
+  case 234: /* type_specifier_nonarray: UVEC4  */
+#line 1852 "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 7564 "MachineIndependent/glslang_tab.cpp"
+#line 7622 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 232: /* type_specifier_nonarray: MAT2  */
-#line 1833 "MachineIndependent/glslang.y"
+  case 235: /* type_specifier_nonarray: MAT2  */
+#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, 2);
     }
-#line 7574 "MachineIndependent/glslang_tab.cpp"
+#line 7632 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 233: /* type_specifier_nonarray: MAT3  */
-#line 1838 "MachineIndependent/glslang.y"
+  case 236: /* type_specifier_nonarray: MAT3  */
+#line 1863 "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 7584 "MachineIndependent/glslang_tab.cpp"
+#line 7642 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 234: /* type_specifier_nonarray: MAT4  */
-#line 1843 "MachineIndependent/glslang.y"
+  case 237: /* type_specifier_nonarray: MAT4  */
+#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(4, 4);
     }
-#line 7594 "MachineIndependent/glslang_tab.cpp"
+#line 7652 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 235: /* type_specifier_nonarray: MAT2X2  */
-#line 1848 "MachineIndependent/glslang.y"
+  case 238: /* type_specifier_nonarray: MAT2X2  */
+#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(2, 2);
     }
-#line 7604 "MachineIndependent/glslang_tab.cpp"
+#line 7662 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 236: /* type_specifier_nonarray: MAT2X3  */
-#line 1853 "MachineIndependent/glslang.y"
+  case 239: /* type_specifier_nonarray: MAT2X3  */
+#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(2, 3);
     }
-#line 7614 "MachineIndependent/glslang_tab.cpp"
+#line 7672 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 237: /* type_specifier_nonarray: MAT2X4  */
-#line 1858 "MachineIndependent/glslang.y"
+  case 240: /* type_specifier_nonarray: MAT2X4  */
+#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, 4);
     }
-#line 7624 "MachineIndependent/glslang_tab.cpp"
+#line 7682 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 238: /* type_specifier_nonarray: MAT3X2  */
-#line 1863 "MachineIndependent/glslang.y"
+  case 241: /* type_specifier_nonarray: MAT3X2  */
+#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(3, 2);
     }
-#line 7634 "MachineIndependent/glslang_tab.cpp"
+#line 7692 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 239: /* type_specifier_nonarray: MAT3X3  */
-#line 1868 "MachineIndependent/glslang.y"
+  case 242: /* type_specifier_nonarray: MAT3X3  */
+#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(3, 3);
     }
-#line 7644 "MachineIndependent/glslang_tab.cpp"
+#line 7702 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 240: /* type_specifier_nonarray: MAT3X4  */
-#line 1873 "MachineIndependent/glslang.y"
+  case 243: /* type_specifier_nonarray: MAT3X4  */
+#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, 4);
     }
-#line 7654 "MachineIndependent/glslang_tab.cpp"
+#line 7712 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 241: /* type_specifier_nonarray: MAT4X2  */
-#line 1878 "MachineIndependent/glslang.y"
+  case 244: /* type_specifier_nonarray: MAT4X2  */
+#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(4, 2);
     }
-#line 7664 "MachineIndependent/glslang_tab.cpp"
+#line 7722 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 242: /* type_specifier_nonarray: MAT4X3  */
-#line 1883 "MachineIndependent/glslang.y"
+  case 245: /* type_specifier_nonarray: MAT4X3  */
+#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(4, 3);
     }
-#line 7674 "MachineIndependent/glslang_tab.cpp"
+#line 7732 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 243: /* type_specifier_nonarray: MAT4X4  */
-#line 1888 "MachineIndependent/glslang.y"
+  case 246: /* type_specifier_nonarray: MAT4X4  */
+#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, 4);
     }
-#line 7684 "MachineIndependent/glslang_tab.cpp"
+#line 7742 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 244: /* type_specifier_nonarray: DOUBLE  */
-#line 1894 "MachineIndependent/glslang.y"
+  case 247: /* type_specifier_nonarray: DOUBLE  */
+#line 1919 "MachineIndependent/glslang.y"
              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7692,121 +7750,121 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 7696 "MachineIndependent/glslang_tab.cpp"
+#line 7754 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 245: /* type_specifier_nonarray: FLOAT16_T  */
-#line 1901 "MachineIndependent/glslang.y"
+  case 248: /* type_specifier_nonarray: FLOAT16_T  */
+#line 1926 "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 7706 "MachineIndependent/glslang_tab.cpp"
+#line 7764 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 246: /* type_specifier_nonarray: FLOAT32_T  */
-#line 1906 "MachineIndependent/glslang.y"
+  case 249: /* type_specifier_nonarray: FLOAT32_T  */
+#line 1931 "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 7716 "MachineIndependent/glslang_tab.cpp"
+#line 7774 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 247: /* type_specifier_nonarray: FLOAT64_T  */
-#line 1911 "MachineIndependent/glslang.y"
+  case 250: /* type_specifier_nonarray: FLOAT64_T  */
+#line 1936 "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 7726 "MachineIndependent/glslang_tab.cpp"
+#line 7784 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 248: /* type_specifier_nonarray: INT8_T  */
-#line 1916 "MachineIndependent/glslang.y"
+  case 251: /* type_specifier_nonarray: INT8_T  */
+#line 1941 "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 7736 "MachineIndependent/glslang_tab.cpp"
+#line 7794 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 249: /* type_specifier_nonarray: UINT8_T  */
-#line 1921 "MachineIndependent/glslang.y"
+  case 252: /* type_specifier_nonarray: UINT8_T  */
+#line 1946 "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 7746 "MachineIndependent/glslang_tab.cpp"
+#line 7804 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 250: /* type_specifier_nonarray: INT16_T  */
-#line 1926 "MachineIndependent/glslang.y"
+  case 253: /* type_specifier_nonarray: INT16_T  */
+#line 1951 "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 7756 "MachineIndependent/glslang_tab.cpp"
+#line 7814 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 251: /* type_specifier_nonarray: UINT16_T  */
-#line 1931 "MachineIndependent/glslang.y"
+  case 254: /* type_specifier_nonarray: UINT16_T  */
+#line 1956 "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 7766 "MachineIndependent/glslang_tab.cpp"
+#line 7824 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 252: /* type_specifier_nonarray: INT32_T  */
-#line 1936 "MachineIndependent/glslang.y"
+  case 255: /* type_specifier_nonarray: INT32_T  */
+#line 1961 "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 7776 "MachineIndependent/glslang_tab.cpp"
+#line 7834 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 253: /* type_specifier_nonarray: UINT32_T  */
-#line 1941 "MachineIndependent/glslang.y"
+  case 256: /* type_specifier_nonarray: UINT32_T  */
+#line 1966 "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 7786 "MachineIndependent/glslang_tab.cpp"
+#line 7844 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 254: /* type_specifier_nonarray: INT64_T  */
-#line 1946 "MachineIndependent/glslang.y"
+  case 257: /* type_specifier_nonarray: INT64_T  */
+#line 1971 "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 7796 "MachineIndependent/glslang_tab.cpp"
+#line 7854 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 255: /* type_specifier_nonarray: UINT64_T  */
-#line 1951 "MachineIndependent/glslang.y"
+  case 258: /* type_specifier_nonarray: UINT64_T  */
+#line 1976 "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 7806 "MachineIndependent/glslang_tab.cpp"
+#line 7864 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 256: /* type_specifier_nonarray: DVEC2  */
-#line 1956 "MachineIndependent/glslang.y"
+  case 259: /* type_specifier_nonarray: DVEC2  */
+#line 1981 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7815,11 +7873,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 7819 "MachineIndependent/glslang_tab.cpp"
+#line 7877 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 257: /* type_specifier_nonarray: DVEC3  */
-#line 1964 "MachineIndependent/glslang.y"
+  case 260: /* type_specifier_nonarray: DVEC3  */
+#line 1989 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7828,11 +7886,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 7832 "MachineIndependent/glslang_tab.cpp"
+#line 7890 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 258: /* type_specifier_nonarray: DVEC4  */
-#line 1972 "MachineIndependent/glslang.y"
+  case 261: /* type_specifier_nonarray: DVEC4  */
+#line 1997 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7841,374 +7899,374 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 7845 "MachineIndependent/glslang_tab.cpp"
+#line 7903 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 259: /* type_specifier_nonarray: F16VEC2  */
-#line 1980 "MachineIndependent/glslang.y"
+  case 262: /* type_specifier_nonarray: F16VEC2  */
+#line 2005 "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 7856 "MachineIndependent/glslang_tab.cpp"
+#line 7914 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 260: /* type_specifier_nonarray: F16VEC3  */
-#line 1986 "MachineIndependent/glslang.y"
+  case 263: /* type_specifier_nonarray: F16VEC3  */
+#line 2011 "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 7867 "MachineIndependent/glslang_tab.cpp"
+#line 7925 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 261: /* type_specifier_nonarray: F16VEC4  */
-#line 1992 "MachineIndependent/glslang.y"
+  case 264: /* type_specifier_nonarray: F16VEC4  */
+#line 2017 "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 7878 "MachineIndependent/glslang_tab.cpp"
+#line 7936 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 262: /* type_specifier_nonarray: F32VEC2  */
-#line 1998 "MachineIndependent/glslang.y"
+  case 265: /* type_specifier_nonarray: F32VEC2  */
+#line 2023 "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 7889 "MachineIndependent/glslang_tab.cpp"
+#line 7947 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 263: /* type_specifier_nonarray: F32VEC3  */
-#line 2004 "MachineIndependent/glslang.y"
+  case 266: /* type_specifier_nonarray: F32VEC3  */
+#line 2029 "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 7900 "MachineIndependent/glslang_tab.cpp"
+#line 7958 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 264: /* type_specifier_nonarray: F32VEC4  */
-#line 2010 "MachineIndependent/glslang.y"
+  case 267: /* type_specifier_nonarray: F32VEC4  */
+#line 2035 "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 7911 "MachineIndependent/glslang_tab.cpp"
+#line 7969 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 265: /* type_specifier_nonarray: F64VEC2  */
-#line 2016 "MachineIndependent/glslang.y"
+  case 268: /* type_specifier_nonarray: F64VEC2  */
+#line 2041 "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 7922 "MachineIndependent/glslang_tab.cpp"
+#line 7980 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 266: /* type_specifier_nonarray: F64VEC3  */
-#line 2022 "MachineIndependent/glslang.y"
+  case 269: /* type_specifier_nonarray: F64VEC3  */
+#line 2047 "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 7933 "MachineIndependent/glslang_tab.cpp"
+#line 7991 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 267: /* type_specifier_nonarray: F64VEC4  */
-#line 2028 "MachineIndependent/glslang.y"
+  case 270: /* type_specifier_nonarray: F64VEC4  */
+#line 2053 "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 7944 "MachineIndependent/glslang_tab.cpp"
+#line 8002 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 268: /* type_specifier_nonarray: I8VEC2  */
-#line 2034 "MachineIndependent/glslang.y"
+  case 271: /* type_specifier_nonarray: I8VEC2  */
+#line 2059 "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 7955 "MachineIndependent/glslang_tab.cpp"
+#line 8013 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 269: /* type_specifier_nonarray: I8VEC3  */
-#line 2040 "MachineIndependent/glslang.y"
+  case 272: /* type_specifier_nonarray: I8VEC3  */
+#line 2065 "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 7966 "MachineIndependent/glslang_tab.cpp"
+#line 8024 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 270: /* type_specifier_nonarray: I8VEC4  */
-#line 2046 "MachineIndependent/glslang.y"
+  case 273: /* type_specifier_nonarray: I8VEC4  */
+#line 2071 "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 7977 "MachineIndependent/glslang_tab.cpp"
+#line 8035 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 271: /* type_specifier_nonarray: I16VEC2  */
-#line 2052 "MachineIndependent/glslang.y"
+  case 274: /* type_specifier_nonarray: I16VEC2  */
+#line 2077 "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 7988 "MachineIndependent/glslang_tab.cpp"
+#line 8046 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 272: /* type_specifier_nonarray: I16VEC3  */
-#line 2058 "MachineIndependent/glslang.y"
+  case 275: /* type_specifier_nonarray: I16VEC3  */
+#line 2083 "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 7999 "MachineIndependent/glslang_tab.cpp"
+#line 8057 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 273: /* type_specifier_nonarray: I16VEC4  */
-#line 2064 "MachineIndependent/glslang.y"
+  case 276: /* type_specifier_nonarray: I16VEC4  */
+#line 2089 "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 8010 "MachineIndependent/glslang_tab.cpp"
+#line 8068 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 274: /* type_specifier_nonarray: I32VEC2  */
-#line 2070 "MachineIndependent/glslang.y"
+  case 277: /* type_specifier_nonarray: I32VEC2  */
+#line 2095 "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 8021 "MachineIndependent/glslang_tab.cpp"
+#line 8079 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 275: /* type_specifier_nonarray: I32VEC3  */
-#line 2076 "MachineIndependent/glslang.y"
+  case 278: /* type_specifier_nonarray: I32VEC3  */
+#line 2101 "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 8032 "MachineIndependent/glslang_tab.cpp"
+#line 8090 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 276: /* type_specifier_nonarray: I32VEC4  */
-#line 2082 "MachineIndependent/glslang.y"
+  case 279: /* type_specifier_nonarray: I32VEC4  */
+#line 2107 "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 8043 "MachineIndependent/glslang_tab.cpp"
+#line 8101 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 277: /* type_specifier_nonarray: I64VEC2  */
-#line 2088 "MachineIndependent/glslang.y"
+  case 280: /* type_specifier_nonarray: I64VEC2  */
+#line 2113 "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 8054 "MachineIndependent/glslang_tab.cpp"
+#line 8112 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 278: /* type_specifier_nonarray: I64VEC3  */
-#line 2094 "MachineIndependent/glslang.y"
+  case 281: /* type_specifier_nonarray: I64VEC3  */
+#line 2119 "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 8065 "MachineIndependent/glslang_tab.cpp"
+#line 8123 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 279: /* type_specifier_nonarray: I64VEC4  */
-#line 2100 "MachineIndependent/glslang.y"
+  case 282: /* type_specifier_nonarray: I64VEC4  */
+#line 2125 "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 8076 "MachineIndependent/glslang_tab.cpp"
+#line 8134 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 280: /* type_specifier_nonarray: U8VEC2  */
-#line 2106 "MachineIndependent/glslang.y"
+  case 283: /* type_specifier_nonarray: U8VEC2  */
+#line 2131 "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 8087 "MachineIndependent/glslang_tab.cpp"
+#line 8145 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 281: /* type_specifier_nonarray: U8VEC3  */
-#line 2112 "MachineIndependent/glslang.y"
+  case 284: /* type_specifier_nonarray: U8VEC3  */
+#line 2137 "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 8098 "MachineIndependent/glslang_tab.cpp"
+#line 8156 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 282: /* type_specifier_nonarray: U8VEC4  */
-#line 2118 "MachineIndependent/glslang.y"
+  case 285: /* type_specifier_nonarray: U8VEC4  */
+#line 2143 "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 8109 "MachineIndependent/glslang_tab.cpp"
+#line 8167 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 283: /* type_specifier_nonarray: U16VEC2  */
-#line 2124 "MachineIndependent/glslang.y"
+  case 286: /* type_specifier_nonarray: U16VEC2  */
+#line 2149 "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 8120 "MachineIndependent/glslang_tab.cpp"
+#line 8178 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 284: /* type_specifier_nonarray: U16VEC3  */
-#line 2130 "MachineIndependent/glslang.y"
+  case 287: /* type_specifier_nonarray: U16VEC3  */
+#line 2155 "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 8131 "MachineIndependent/glslang_tab.cpp"
+#line 8189 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 285: /* type_specifier_nonarray: U16VEC4  */
-#line 2136 "MachineIndependent/glslang.y"
+  case 288: /* type_specifier_nonarray: U16VEC4  */
+#line 2161 "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 8142 "MachineIndependent/glslang_tab.cpp"
+#line 8200 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 286: /* type_specifier_nonarray: U32VEC2  */
-#line 2142 "MachineIndependent/glslang.y"
+  case 289: /* type_specifier_nonarray: U32VEC2  */
+#line 2167 "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 8153 "MachineIndependent/glslang_tab.cpp"
+#line 8211 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 287: /* type_specifier_nonarray: U32VEC3  */
-#line 2148 "MachineIndependent/glslang.y"
+  case 290: /* type_specifier_nonarray: U32VEC3  */
+#line 2173 "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 8164 "MachineIndependent/glslang_tab.cpp"
+#line 8222 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 288: /* type_specifier_nonarray: U32VEC4  */
-#line 2154 "MachineIndependent/glslang.y"
+  case 291: /* type_specifier_nonarray: U32VEC4  */
+#line 2179 "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 8175 "MachineIndependent/glslang_tab.cpp"
+#line 8233 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 289: /* type_specifier_nonarray: U64VEC2  */
-#line 2160 "MachineIndependent/glslang.y"
+  case 292: /* type_specifier_nonarray: U64VEC2  */
+#line 2185 "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 8186 "MachineIndependent/glslang_tab.cpp"
+#line 8244 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 290: /* type_specifier_nonarray: U64VEC3  */
-#line 2166 "MachineIndependent/glslang.y"
+  case 293: /* type_specifier_nonarray: U64VEC3  */
+#line 2191 "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 8197 "MachineIndependent/glslang_tab.cpp"
+#line 8255 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 291: /* type_specifier_nonarray: U64VEC4  */
-#line 2172 "MachineIndependent/glslang.y"
+  case 294: /* type_specifier_nonarray: U64VEC4  */
+#line 2197 "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 8208 "MachineIndependent/glslang_tab.cpp"
+#line 8266 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 292: /* type_specifier_nonarray: DMAT2  */
-#line 2178 "MachineIndependent/glslang.y"
+  case 295: /* type_specifier_nonarray: DMAT2  */
+#line 2203 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8217,11 +8275,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8221 "MachineIndependent/glslang_tab.cpp"
+#line 8279 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 293: /* type_specifier_nonarray: DMAT3  */
-#line 2186 "MachineIndependent/glslang.y"
+  case 296: /* type_specifier_nonarray: DMAT3  */
+#line 2211 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8230,11 +8288,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8234 "MachineIndependent/glslang_tab.cpp"
+#line 8292 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 294: /* type_specifier_nonarray: DMAT4  */
-#line 2194 "MachineIndependent/glslang.y"
+  case 297: /* type_specifier_nonarray: DMAT4  */
+#line 2219 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8243,11 +8301,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8247 "MachineIndependent/glslang_tab.cpp"
+#line 8305 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 295: /* type_specifier_nonarray: DMAT2X2  */
-#line 2202 "MachineIndependent/glslang.y"
+  case 298: /* type_specifier_nonarray: DMAT2X2  */
+#line 2227 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8256,11 +8314,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8260 "MachineIndependent/glslang_tab.cpp"
+#line 8318 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 296: /* type_specifier_nonarray: DMAT2X3  */
-#line 2210 "MachineIndependent/glslang.y"
+  case 299: /* type_specifier_nonarray: DMAT2X3  */
+#line 2235 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8269,11 +8327,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8273 "MachineIndependent/glslang_tab.cpp"
+#line 8331 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 297: /* type_specifier_nonarray: DMAT2X4  */
-#line 2218 "MachineIndependent/glslang.y"
+  case 300: /* type_specifier_nonarray: DMAT2X4  */
+#line 2243 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8282,11 +8340,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8286 "MachineIndependent/glslang_tab.cpp"
+#line 8344 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 298: /* type_specifier_nonarray: DMAT3X2  */
-#line 2226 "MachineIndependent/glslang.y"
+  case 301: /* type_specifier_nonarray: DMAT3X2  */
+#line 2251 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8295,11 +8353,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8299 "MachineIndependent/glslang_tab.cpp"
+#line 8357 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 299: /* type_specifier_nonarray: DMAT3X3  */
-#line 2234 "MachineIndependent/glslang.y"
+  case 302: /* type_specifier_nonarray: DMAT3X3  */
+#line 2259 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8308,11 +8366,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8312 "MachineIndependent/glslang_tab.cpp"
+#line 8370 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 300: /* type_specifier_nonarray: DMAT3X4  */
-#line 2242 "MachineIndependent/glslang.y"
+  case 303: /* type_specifier_nonarray: DMAT3X4  */
+#line 2267 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8321,11 +8379,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8325 "MachineIndependent/glslang_tab.cpp"
+#line 8383 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 301: /* type_specifier_nonarray: DMAT4X2  */
-#line 2250 "MachineIndependent/glslang.y"
+  case 304: /* type_specifier_nonarray: DMAT4X2  */
+#line 2275 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8334,11 +8392,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 8338 "MachineIndependent/glslang_tab.cpp"
+#line 8396 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 302: /* type_specifier_nonarray: DMAT4X3  */
-#line 2258 "MachineIndependent/glslang.y"
+  case 305: /* type_specifier_nonarray: DMAT4X3  */
+#line 2283 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8347,11 +8405,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 8351 "MachineIndependent/glslang_tab.cpp"
+#line 8409 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 303: /* type_specifier_nonarray: DMAT4X4  */
-#line 2266 "MachineIndependent/glslang.y"
+  case 306: /* type_specifier_nonarray: DMAT4X4  */
+#line 2291 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8360,2228 +8418,2228 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8364 "MachineIndependent/glslang_tab.cpp"
+#line 8422 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 304: /* type_specifier_nonarray: F16MAT2  */
-#line 2274 "MachineIndependent/glslang.y"
+  case 307: /* type_specifier_nonarray: F16MAT2  */
+#line 2299 "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 8375 "MachineIndependent/glslang_tab.cpp"
+#line 8433 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 305: /* type_specifier_nonarray: F16MAT3  */
-#line 2280 "MachineIndependent/glslang.y"
+  case 308: /* type_specifier_nonarray: F16MAT3  */
+#line 2305 "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 8386 "MachineIndependent/glslang_tab.cpp"
+#line 8444 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 306: /* type_specifier_nonarray: F16MAT4  */
-#line 2286 "MachineIndependent/glslang.y"
+  case 309: /* type_specifier_nonarray: F16MAT4  */
+#line 2311 "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 8397 "MachineIndependent/glslang_tab.cpp"
+#line 8455 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 307: /* type_specifier_nonarray: F16MAT2X2  */
-#line 2292 "MachineIndependent/glslang.y"
+  case 310: /* type_specifier_nonarray: F16MAT2X2  */
+#line 2317 "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 8408 "MachineIndependent/glslang_tab.cpp"
+#line 8466 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 308: /* type_specifier_nonarray: F16MAT2X3  */
-#line 2298 "MachineIndependent/glslang.y"
+  case 311: /* type_specifier_nonarray: F16MAT2X3  */
+#line 2323 "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 8419 "MachineIndependent/glslang_tab.cpp"
+#line 8477 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 309: /* type_specifier_nonarray: F16MAT2X4  */
-#line 2304 "MachineIndependent/glslang.y"
+  case 312: /* type_specifier_nonarray: F16MAT2X4  */
+#line 2329 "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 8430 "MachineIndependent/glslang_tab.cpp"
+#line 8488 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 310: /* type_specifier_nonarray: F16MAT3X2  */
-#line 2310 "MachineIndependent/glslang.y"
+  case 313: /* type_specifier_nonarray: F16MAT3X2  */
+#line 2335 "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 8441 "MachineIndependent/glslang_tab.cpp"
+#line 8499 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 311: /* type_specifier_nonarray: F16MAT3X3  */
-#line 2316 "MachineIndependent/glslang.y"
+  case 314: /* type_specifier_nonarray: F16MAT3X3  */
+#line 2341 "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 8452 "MachineIndependent/glslang_tab.cpp"
+#line 8510 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 312: /* type_specifier_nonarray: F16MAT3X4  */
-#line 2322 "MachineIndependent/glslang.y"
+  case 315: /* type_specifier_nonarray: F16MAT3X4  */
+#line 2347 "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 8463 "MachineIndependent/glslang_tab.cpp"
+#line 8521 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 313: /* type_specifier_nonarray: F16MAT4X2  */
-#line 2328 "MachineIndependent/glslang.y"
+  case 316: /* type_specifier_nonarray: F16MAT4X2  */
+#line 2353 "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 8474 "MachineIndependent/glslang_tab.cpp"
+#line 8532 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 314: /* type_specifier_nonarray: F16MAT4X3  */
-#line 2334 "MachineIndependent/glslang.y"
+  case 317: /* type_specifier_nonarray: F16MAT4X3  */
+#line 2359 "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 8485 "MachineIndependent/glslang_tab.cpp"
+#line 8543 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 315: /* type_specifier_nonarray: F16MAT4X4  */
-#line 2340 "MachineIndependent/glslang.y"
+  case 318: /* type_specifier_nonarray: F16MAT4X4  */
+#line 2365 "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 8496 "MachineIndependent/glslang_tab.cpp"
+#line 8554 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 316: /* type_specifier_nonarray: F32MAT2  */
-#line 2346 "MachineIndependent/glslang.y"
+  case 319: /* type_specifier_nonarray: F32MAT2  */
+#line 2371 "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 8507 "MachineIndependent/glslang_tab.cpp"
+#line 8565 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 317: /* type_specifier_nonarray: F32MAT3  */
-#line 2352 "MachineIndependent/glslang.y"
+  case 320: /* type_specifier_nonarray: F32MAT3  */
+#line 2377 "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 8518 "MachineIndependent/glslang_tab.cpp"
+#line 8576 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 318: /* type_specifier_nonarray: F32MAT4  */
-#line 2358 "MachineIndependent/glslang.y"
+  case 321: /* type_specifier_nonarray: F32MAT4  */
+#line 2383 "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 8529 "MachineIndependent/glslang_tab.cpp"
+#line 8587 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 319: /* type_specifier_nonarray: F32MAT2X2  */
-#line 2364 "MachineIndependent/glslang.y"
+  case 322: /* type_specifier_nonarray: F32MAT2X2  */
+#line 2389 "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 8540 "MachineIndependent/glslang_tab.cpp"
+#line 8598 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 320: /* type_specifier_nonarray: F32MAT2X3  */
-#line 2370 "MachineIndependent/glslang.y"
+  case 323: /* type_specifier_nonarray: F32MAT2X3  */
+#line 2395 "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 8551 "MachineIndependent/glslang_tab.cpp"
+#line 8609 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 321: /* type_specifier_nonarray: F32MAT2X4  */
-#line 2376 "MachineIndependent/glslang.y"
+  case 324: /* type_specifier_nonarray: F32MAT2X4  */
+#line 2401 "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 8562 "MachineIndependent/glslang_tab.cpp"
+#line 8620 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 322: /* type_specifier_nonarray: F32MAT3X2  */
-#line 2382 "MachineIndependent/glslang.y"
+  case 325: /* type_specifier_nonarray: F32MAT3X2  */
+#line 2407 "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 8573 "MachineIndependent/glslang_tab.cpp"
+#line 8631 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 323: /* type_specifier_nonarray: F32MAT3X3  */
-#line 2388 "MachineIndependent/glslang.y"
+  case 326: /* type_specifier_nonarray: F32MAT3X3  */
+#line 2413 "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 8584 "MachineIndependent/glslang_tab.cpp"
+#line 8642 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 324: /* type_specifier_nonarray: F32MAT3X4  */
-#line 2394 "MachineIndependent/glslang.y"
+  case 327: /* type_specifier_nonarray: F32MAT3X4  */
+#line 2419 "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 8595 "MachineIndependent/glslang_tab.cpp"
+#line 8653 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 325: /* type_specifier_nonarray: F32MAT4X2  */
-#line 2400 "MachineIndependent/glslang.y"
+  case 328: /* type_specifier_nonarray: F32MAT4X2  */
+#line 2425 "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 8606 "MachineIndependent/glslang_tab.cpp"
+#line 8664 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 326: /* type_specifier_nonarray: F32MAT4X3  */
-#line 2406 "MachineIndependent/glslang.y"
+  case 329: /* type_specifier_nonarray: F32MAT4X3  */
+#line 2431 "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 8617 "MachineIndependent/glslang_tab.cpp"
+#line 8675 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 327: /* type_specifier_nonarray: F32MAT4X4  */
-#line 2412 "MachineIndependent/glslang.y"
+  case 330: /* type_specifier_nonarray: F32MAT4X4  */
+#line 2437 "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 8628 "MachineIndependent/glslang_tab.cpp"
+#line 8686 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 328: /* type_specifier_nonarray: F64MAT2  */
-#line 2418 "MachineIndependent/glslang.y"
+  case 331: /* type_specifier_nonarray: F64MAT2  */
+#line 2443 "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 8639 "MachineIndependent/glslang_tab.cpp"
+#line 8697 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 329: /* type_specifier_nonarray: F64MAT3  */
-#line 2424 "MachineIndependent/glslang.y"
+  case 332: /* type_specifier_nonarray: F64MAT3  */
+#line 2449 "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 8650 "MachineIndependent/glslang_tab.cpp"
+#line 8708 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 330: /* type_specifier_nonarray: F64MAT4  */
-#line 2430 "MachineIndependent/glslang.y"
+  case 333: /* type_specifier_nonarray: F64MAT4  */
+#line 2455 "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 8661 "MachineIndependent/glslang_tab.cpp"
+#line 8719 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 331: /* type_specifier_nonarray: F64MAT2X2  */
-#line 2436 "MachineIndependent/glslang.y"
+  case 334: /* type_specifier_nonarray: F64MAT2X2  */
+#line 2461 "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 8672 "MachineIndependent/glslang_tab.cpp"
+#line 8730 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 332: /* type_specifier_nonarray: F64MAT2X3  */
-#line 2442 "MachineIndependent/glslang.y"
+  case 335: /* type_specifier_nonarray: F64MAT2X3  */
+#line 2467 "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 8683 "MachineIndependent/glslang_tab.cpp"
+#line 8741 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 333: /* type_specifier_nonarray: F64MAT2X4  */
-#line 2448 "MachineIndependent/glslang.y"
+  case 336: /* type_specifier_nonarray: F64MAT2X4  */
+#line 2473 "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 8694 "MachineIndependent/glslang_tab.cpp"
+#line 8752 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 334: /* type_specifier_nonarray: F64MAT3X2  */
-#line 2454 "MachineIndependent/glslang.y"
+  case 337: /* type_specifier_nonarray: F64MAT3X2  */
+#line 2479 "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 8705 "MachineIndependent/glslang_tab.cpp"
+#line 8763 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 335: /* type_specifier_nonarray: F64MAT3X3  */
-#line 2460 "MachineIndependent/glslang.y"
+  case 338: /* type_specifier_nonarray: F64MAT3X3  */
+#line 2485 "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 8716 "MachineIndependent/glslang_tab.cpp"
+#line 8774 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 336: /* type_specifier_nonarray: F64MAT3X4  */
-#line 2466 "MachineIndependent/glslang.y"
+  case 339: /* type_specifier_nonarray: F64MAT3X4  */
+#line 2491 "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 8727 "MachineIndependent/glslang_tab.cpp"
+#line 8785 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 337: /* type_specifier_nonarray: F64MAT4X2  */
-#line 2472 "MachineIndependent/glslang.y"
+  case 340: /* type_specifier_nonarray: F64MAT4X2  */
+#line 2497 "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 8738 "MachineIndependent/glslang_tab.cpp"
+#line 8796 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 338: /* type_specifier_nonarray: F64MAT4X3  */
-#line 2478 "MachineIndependent/glslang.y"
+  case 341: /* type_specifier_nonarray: F64MAT4X3  */
+#line 2503 "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 8749 "MachineIndependent/glslang_tab.cpp"
+#line 8807 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 339: /* type_specifier_nonarray: F64MAT4X4  */
-#line 2484 "MachineIndependent/glslang.y"
+  case 342: /* type_specifier_nonarray: F64MAT4X4  */
+#line 2509 "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 8760 "MachineIndependent/glslang_tab.cpp"
+#line 8818 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 340: /* type_specifier_nonarray: ACCSTRUCTNV  */
-#line 2490 "MachineIndependent/glslang.y"
+  case 343: /* type_specifier_nonarray: ACCSTRUCTNV  */
+#line 2515 "MachineIndependent/glslang.y"
                   {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 8769 "MachineIndependent/glslang_tab.cpp"
+#line 8827 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 341: /* type_specifier_nonarray: ACCSTRUCTEXT  */
-#line 2494 "MachineIndependent/glslang.y"
+  case 344: /* type_specifier_nonarray: ACCSTRUCTEXT  */
+#line 2519 "MachineIndependent/glslang.y"
                    {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 8778 "MachineIndependent/glslang_tab.cpp"
+#line 8836 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 342: /* type_specifier_nonarray: RAYQUERYEXT  */
-#line 2498 "MachineIndependent/glslang.y"
+  case 345: /* type_specifier_nonarray: RAYQUERYEXT  */
+#line 2523 "MachineIndependent/glslang.y"
                   {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtRayQuery;
     }
-#line 8787 "MachineIndependent/glslang_tab.cpp"
+#line 8845 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 343: /* type_specifier_nonarray: ATOMIC_UINT  */
-#line 2502 "MachineIndependent/glslang.y"
+  case 346: /* type_specifier_nonarray: ATOMIC_UINT  */
+#line 2527 "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 8797 "MachineIndependent/glslang_tab.cpp"
+#line 8855 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 344: /* type_specifier_nonarray: SAMPLER1D  */
-#line 2507 "MachineIndependent/glslang.y"
+  case 347: /* type_specifier_nonarray: SAMPLER1D  */
+#line 2532 "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 8807 "MachineIndependent/glslang_tab.cpp"
+#line 8865 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 345: /* type_specifier_nonarray: SAMPLER2D  */
-#line 2513 "MachineIndependent/glslang.y"
+  case 348: /* type_specifier_nonarray: SAMPLER2D  */
+#line 2538 "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 8817 "MachineIndependent/glslang_tab.cpp"
+#line 8875 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 346: /* type_specifier_nonarray: SAMPLER3D  */
-#line 2518 "MachineIndependent/glslang.y"
+  case 349: /* type_specifier_nonarray: SAMPLER3D  */
+#line 2543 "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 8827 "MachineIndependent/glslang_tab.cpp"
+#line 8885 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 347: /* type_specifier_nonarray: SAMPLERCUBE  */
-#line 2523 "MachineIndependent/glslang.y"
+  case 350: /* type_specifier_nonarray: SAMPLERCUBE  */
+#line 2548 "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 8837 "MachineIndependent/glslang_tab.cpp"
+#line 8895 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 348: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
-#line 2528 "MachineIndependent/glslang.y"
+  case 351: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
+#line 2553 "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 8847 "MachineIndependent/glslang_tab.cpp"
+#line 8905 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 349: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
-#line 2533 "MachineIndependent/glslang.y"
+  case 352: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
+#line 2558 "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 8857 "MachineIndependent/glslang_tab.cpp"
+#line 8915 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 350: /* type_specifier_nonarray: SAMPLER2DARRAY  */
-#line 2538 "MachineIndependent/glslang.y"
+  case 353: /* type_specifier_nonarray: SAMPLER2DARRAY  */
+#line 2563 "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 8867 "MachineIndependent/glslang_tab.cpp"
+#line 8925 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 351: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
-#line 2543 "MachineIndependent/glslang.y"
+  case 354: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
+#line 2568 "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 8877 "MachineIndependent/glslang_tab.cpp"
+#line 8935 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 352: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
-#line 2549 "MachineIndependent/glslang.y"
+  case 355: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
+#line 2574 "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 8887 "MachineIndependent/glslang_tab.cpp"
+#line 8945 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 353: /* type_specifier_nonarray: SAMPLER1DARRAY  */
-#line 2554 "MachineIndependent/glslang.y"
+  case 356: /* type_specifier_nonarray: SAMPLER1DARRAY  */
+#line 2579 "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 8897 "MachineIndependent/glslang_tab.cpp"
+#line 8955 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 354: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
-#line 2559 "MachineIndependent/glslang.y"
+  case 357: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
+#line 2584 "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 8907 "MachineIndependent/glslang_tab.cpp"
+#line 8965 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 355: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
-#line 2564 "MachineIndependent/glslang.y"
+  case 358: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
+#line 2589 "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 8917 "MachineIndependent/glslang_tab.cpp"
+#line 8975 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 356: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
-#line 2569 "MachineIndependent/glslang.y"
+  case 359: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
+#line 2594 "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 8927 "MachineIndependent/glslang_tab.cpp"
+#line 8985 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 357: /* type_specifier_nonarray: F16SAMPLER1D  */
-#line 2574 "MachineIndependent/glslang.y"
+  case 360: /* type_specifier_nonarray: F16SAMPLER1D  */
+#line 2599 "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 8938 "MachineIndependent/glslang_tab.cpp"
+#line 8996 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 358: /* type_specifier_nonarray: F16SAMPLER2D  */
-#line 2580 "MachineIndependent/glslang.y"
+  case 361: /* type_specifier_nonarray: F16SAMPLER2D  */
+#line 2605 "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 8949 "MachineIndependent/glslang_tab.cpp"
+#line 9007 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 359: /* type_specifier_nonarray: F16SAMPLER3D  */
-#line 2586 "MachineIndependent/glslang.y"
+  case 362: /* type_specifier_nonarray: F16SAMPLER3D  */
+#line 2611 "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 8960 "MachineIndependent/glslang_tab.cpp"
+#line 9018 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 360: /* type_specifier_nonarray: F16SAMPLERCUBE  */
-#line 2592 "MachineIndependent/glslang.y"
+  case 363: /* type_specifier_nonarray: F16SAMPLERCUBE  */
+#line 2617 "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 8971 "MachineIndependent/glslang_tab.cpp"
+#line 9029 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 361: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
-#line 2598 "MachineIndependent/glslang.y"
+  case 364: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
+#line 2623 "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 8982 "MachineIndependent/glslang_tab.cpp"
+#line 9040 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 362: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
-#line 2604 "MachineIndependent/glslang.y"
+  case 365: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
+#line 2629 "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 8993 "MachineIndependent/glslang_tab.cpp"
+#line 9051 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 363: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
-#line 2610 "MachineIndependent/glslang.y"
+  case 366: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
+#line 2635 "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 9004 "MachineIndependent/glslang_tab.cpp"
+#line 9062 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 364: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
-#line 2616 "MachineIndependent/glslang.y"
+  case 367: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
+#line 2641 "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 9015 "MachineIndependent/glslang_tab.cpp"
+#line 9073 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 365: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
-#line 2622 "MachineIndependent/glslang.y"
+  case 368: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
+#line 2647 "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 9026 "MachineIndependent/glslang_tab.cpp"
+#line 9084 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 366: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
-#line 2628 "MachineIndependent/glslang.y"
+  case 369: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
+#line 2653 "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 9037 "MachineIndependent/glslang_tab.cpp"
+#line 9095 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 367: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
-#line 2634 "MachineIndependent/glslang.y"
+  case 370: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
+#line 2659 "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 9048 "MachineIndependent/glslang_tab.cpp"
+#line 9106 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 368: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
-#line 2640 "MachineIndependent/glslang.y"
+  case 371: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
+#line 2665 "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 9059 "MachineIndependent/glslang_tab.cpp"
+#line 9117 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 369: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
-#line 2646 "MachineIndependent/glslang.y"
+  case 372: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
+#line 2671 "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 9070 "MachineIndependent/glslang_tab.cpp"
+#line 9128 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 370: /* type_specifier_nonarray: ISAMPLER1D  */
-#line 2652 "MachineIndependent/glslang.y"
+  case 373: /* type_specifier_nonarray: ISAMPLER1D  */
+#line 2677 "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 9080 "MachineIndependent/glslang_tab.cpp"
+#line 9138 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 371: /* type_specifier_nonarray: ISAMPLER2D  */
-#line 2658 "MachineIndependent/glslang.y"
+  case 374: /* type_specifier_nonarray: ISAMPLER2D  */
+#line 2683 "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 9090 "MachineIndependent/glslang_tab.cpp"
+#line 9148 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 372: /* type_specifier_nonarray: ISAMPLER3D  */
-#line 2663 "MachineIndependent/glslang.y"
+  case 375: /* type_specifier_nonarray: ISAMPLER3D  */
+#line 2688 "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 9100 "MachineIndependent/glslang_tab.cpp"
+#line 9158 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 373: /* type_specifier_nonarray: ISAMPLERCUBE  */
-#line 2668 "MachineIndependent/glslang.y"
+  case 376: /* type_specifier_nonarray: ISAMPLERCUBE  */
+#line 2693 "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 9110 "MachineIndependent/glslang_tab.cpp"
+#line 9168 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 374: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
-#line 2673 "MachineIndependent/glslang.y"
+  case 377: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
+#line 2698 "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 9120 "MachineIndependent/glslang_tab.cpp"
+#line 9178 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 375: /* type_specifier_nonarray: USAMPLER2D  */
-#line 2678 "MachineIndependent/glslang.y"
+  case 378: /* type_specifier_nonarray: USAMPLER2D  */
+#line 2703 "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 9130 "MachineIndependent/glslang_tab.cpp"
+#line 9188 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 376: /* type_specifier_nonarray: USAMPLER3D  */
-#line 2683 "MachineIndependent/glslang.y"
+  case 379: /* type_specifier_nonarray: USAMPLER3D  */
+#line 2708 "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 9140 "MachineIndependent/glslang_tab.cpp"
+#line 9198 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 377: /* type_specifier_nonarray: USAMPLERCUBE  */
-#line 2688 "MachineIndependent/glslang.y"
+  case 380: /* type_specifier_nonarray: USAMPLERCUBE  */
+#line 2713 "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 9150 "MachineIndependent/glslang_tab.cpp"
+#line 9208 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 378: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
-#line 2694 "MachineIndependent/glslang.y"
+  case 381: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
+#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(EbtInt, Esd1D, true);
     }
-#line 9160 "MachineIndependent/glslang_tab.cpp"
+#line 9218 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 379: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
-#line 2699 "MachineIndependent/glslang.y"
+  case 382: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
+#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, EsdCube, true);
     }
-#line 9170 "MachineIndependent/glslang_tab.cpp"
+#line 9228 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 380: /* type_specifier_nonarray: USAMPLER1D  */
-#line 2704 "MachineIndependent/glslang.y"
+  case 383: /* type_specifier_nonarray: USAMPLER1D  */
+#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(EbtUint, Esd1D);
     }
-#line 9180 "MachineIndependent/glslang_tab.cpp"
+#line 9238 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 381: /* type_specifier_nonarray: USAMPLER1DARRAY  */
-#line 2709 "MachineIndependent/glslang.y"
+  case 384: /* type_specifier_nonarray: USAMPLER1DARRAY  */
+#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, true);
     }
-#line 9190 "MachineIndependent/glslang_tab.cpp"
+#line 9248 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 382: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
-#line 2714 "MachineIndependent/glslang.y"
+  case 385: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
+#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, EsdCube, true);
     }
-#line 9200 "MachineIndependent/glslang_tab.cpp"
+#line 9258 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 383: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
-#line 2719 "MachineIndependent/glslang.y"
+  case 386: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
+#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.setTexture(EbtFloat, EsdCube, true);
     }
-#line 9210 "MachineIndependent/glslang_tab.cpp"
+#line 9268 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 384: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
-#line 2724 "MachineIndependent/glslang.y"
+  case 387: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
+#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(EbtInt, EsdCube, true);
     }
-#line 9220 "MachineIndependent/glslang_tab.cpp"
+#line 9278 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 385: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
-#line 2729 "MachineIndependent/glslang.y"
+  case 388: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
+#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(EbtUint, EsdCube, true);
     }
-#line 9230 "MachineIndependent/glslang_tab.cpp"
+#line 9288 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 386: /* type_specifier_nonarray: USAMPLER2DARRAY  */
-#line 2735 "MachineIndependent/glslang.y"
+  case 389: /* type_specifier_nonarray: USAMPLER2DARRAY  */
+#line 2760 "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 9240 "MachineIndependent/glslang_tab.cpp"
+#line 9298 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 387: /* type_specifier_nonarray: TEXTURE2D  */
-#line 2740 "MachineIndependent/glslang.y"
+  case 390: /* type_specifier_nonarray: TEXTURE2D  */
+#line 2765 "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 9250 "MachineIndependent/glslang_tab.cpp"
+#line 9308 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 388: /* type_specifier_nonarray: TEXTURE3D  */
-#line 2745 "MachineIndependent/glslang.y"
+  case 391: /* type_specifier_nonarray: TEXTURE3D  */
+#line 2770 "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 9260 "MachineIndependent/glslang_tab.cpp"
+#line 9318 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 389: /* type_specifier_nonarray: TEXTURE2DARRAY  */
-#line 2750 "MachineIndependent/glslang.y"
+  case 392: /* type_specifier_nonarray: TEXTURE2DARRAY  */
+#line 2775 "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 9270 "MachineIndependent/glslang_tab.cpp"
+#line 9328 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 390: /* type_specifier_nonarray: TEXTURECUBE  */
-#line 2755 "MachineIndependent/glslang.y"
+  case 393: /* type_specifier_nonarray: TEXTURECUBE  */
+#line 2780 "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 9280 "MachineIndependent/glslang_tab.cpp"
+#line 9338 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 391: /* type_specifier_nonarray: ITEXTURE2D  */
-#line 2760 "MachineIndependent/glslang.y"
+  case 394: /* type_specifier_nonarray: ITEXTURE2D  */
+#line 2785 "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 9290 "MachineIndependent/glslang_tab.cpp"
+#line 9348 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 392: /* type_specifier_nonarray: ITEXTURE3D  */
-#line 2765 "MachineIndependent/glslang.y"
+  case 395: /* type_specifier_nonarray: ITEXTURE3D  */
+#line 2790 "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 9300 "MachineIndependent/glslang_tab.cpp"
+#line 9358 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 393: /* type_specifier_nonarray: ITEXTURECUBE  */
-#line 2770 "MachineIndependent/glslang.y"
+  case 396: /* type_specifier_nonarray: ITEXTURECUBE  */
+#line 2795 "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 9310 "MachineIndependent/glslang_tab.cpp"
+#line 9368 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 394: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
-#line 2775 "MachineIndependent/glslang.y"
+  case 397: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
+#line 2800 "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 9320 "MachineIndependent/glslang_tab.cpp"
+#line 9378 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 395: /* type_specifier_nonarray: UTEXTURE2D  */
-#line 2780 "MachineIndependent/glslang.y"
+  case 398: /* type_specifier_nonarray: UTEXTURE2D  */
+#line 2805 "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 9330 "MachineIndependent/glslang_tab.cpp"
+#line 9388 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 396: /* type_specifier_nonarray: UTEXTURE3D  */
-#line 2785 "MachineIndependent/glslang.y"
+  case 399: /* type_specifier_nonarray: UTEXTURE3D  */
+#line 2810 "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 9340 "MachineIndependent/glslang_tab.cpp"
+#line 9398 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 397: /* type_specifier_nonarray: UTEXTURECUBE  */
-#line 2790 "MachineIndependent/glslang.y"
+  case 400: /* type_specifier_nonarray: UTEXTURECUBE  */
+#line 2815 "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 9350 "MachineIndependent/glslang_tab.cpp"
+#line 9408 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 398: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
-#line 2795 "MachineIndependent/glslang.y"
+  case 401: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
+#line 2820 "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 9360 "MachineIndependent/glslang_tab.cpp"
+#line 9418 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 399: /* type_specifier_nonarray: SAMPLER  */
-#line 2800 "MachineIndependent/glslang.y"
+  case 402: /* type_specifier_nonarray: SAMPLER  */
+#line 2825 "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 9370 "MachineIndependent/glslang_tab.cpp"
+#line 9428 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 400: /* type_specifier_nonarray: SAMPLERSHADOW  */
-#line 2805 "MachineIndependent/glslang.y"
+  case 403: /* type_specifier_nonarray: SAMPLERSHADOW  */
+#line 2830 "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 9380 "MachineIndependent/glslang_tab.cpp"
+#line 9438 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 401: /* type_specifier_nonarray: SAMPLER2DRECT  */
-#line 2811 "MachineIndependent/glslang.y"
+  case 404: /* type_specifier_nonarray: SAMPLER2DRECT  */
+#line 2836 "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 9390 "MachineIndependent/glslang_tab.cpp"
+#line 9448 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 402: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
-#line 2816 "MachineIndependent/glslang.y"
+  case 405: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
+#line 2841 "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 9400 "MachineIndependent/glslang_tab.cpp"
+#line 9458 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 403: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
-#line 2821 "MachineIndependent/glslang.y"
+  case 406: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
+#line 2846 "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 9411 "MachineIndependent/glslang_tab.cpp"
+#line 9469 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 404: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
-#line 2827 "MachineIndependent/glslang.y"
+  case 407: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
+#line 2852 "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 9422 "MachineIndependent/glslang_tab.cpp"
+#line 9480 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 405: /* type_specifier_nonarray: ISAMPLER2DRECT  */
-#line 2833 "MachineIndependent/glslang.y"
+  case 408: /* type_specifier_nonarray: ISAMPLER2DRECT  */
+#line 2858 "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 9432 "MachineIndependent/glslang_tab.cpp"
+#line 9490 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 406: /* type_specifier_nonarray: USAMPLER2DRECT  */
-#line 2838 "MachineIndependent/glslang.y"
+  case 409: /* type_specifier_nonarray: USAMPLER2DRECT  */
+#line 2863 "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 9442 "MachineIndependent/glslang_tab.cpp"
+#line 9500 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 407: /* type_specifier_nonarray: SAMPLERBUFFER  */
-#line 2843 "MachineIndependent/glslang.y"
+  case 410: /* type_specifier_nonarray: SAMPLERBUFFER  */
+#line 2868 "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 9452 "MachineIndependent/glslang_tab.cpp"
+#line 9510 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 408: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
-#line 2848 "MachineIndependent/glslang.y"
+  case 411: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
+#line 2873 "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 9463 "MachineIndependent/glslang_tab.cpp"
+#line 9521 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 409: /* type_specifier_nonarray: ISAMPLERBUFFER  */
-#line 2854 "MachineIndependent/glslang.y"
+  case 412: /* type_specifier_nonarray: ISAMPLERBUFFER  */
+#line 2879 "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 9473 "MachineIndependent/glslang_tab.cpp"
+#line 9531 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 410: /* type_specifier_nonarray: USAMPLERBUFFER  */
-#line 2859 "MachineIndependent/glslang.y"
+  case 413: /* type_specifier_nonarray: USAMPLERBUFFER  */
+#line 2884 "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 9483 "MachineIndependent/glslang_tab.cpp"
+#line 9541 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 411: /* type_specifier_nonarray: SAMPLER2DMS  */
-#line 2864 "MachineIndependent/glslang.y"
+  case 414: /* type_specifier_nonarray: SAMPLER2DMS  */
+#line 2889 "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 9493 "MachineIndependent/glslang_tab.cpp"
+#line 9551 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 412: /* type_specifier_nonarray: F16SAMPLER2DMS  */
-#line 2869 "MachineIndependent/glslang.y"
+  case 415: /* type_specifier_nonarray: F16SAMPLER2DMS  */
+#line 2894 "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 9504 "MachineIndependent/glslang_tab.cpp"
+#line 9562 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 413: /* type_specifier_nonarray: ISAMPLER2DMS  */
-#line 2875 "MachineIndependent/glslang.y"
+  case 416: /* type_specifier_nonarray: ISAMPLER2DMS  */
+#line 2900 "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 9514 "MachineIndependent/glslang_tab.cpp"
+#line 9572 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 414: /* type_specifier_nonarray: USAMPLER2DMS  */
-#line 2880 "MachineIndependent/glslang.y"
+  case 417: /* type_specifier_nonarray: USAMPLER2DMS  */
+#line 2905 "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 9524 "MachineIndependent/glslang_tab.cpp"
+#line 9582 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 415: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
-#line 2885 "MachineIndependent/glslang.y"
+  case 418: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
+#line 2910 "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 9534 "MachineIndependent/glslang_tab.cpp"
+#line 9592 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 416: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
-#line 2890 "MachineIndependent/glslang.y"
+  case 419: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
+#line 2915 "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 9545 "MachineIndependent/glslang_tab.cpp"
+#line 9603 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 417: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
-#line 2896 "MachineIndependent/glslang.y"
+  case 420: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
+#line 2921 "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 9555 "MachineIndependent/glslang_tab.cpp"
+#line 9613 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 418: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
-#line 2901 "MachineIndependent/glslang.y"
+  case 421: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
+#line 2926 "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 9565 "MachineIndependent/glslang_tab.cpp"
+#line 9623 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 419: /* type_specifier_nonarray: TEXTURE1D  */
-#line 2906 "MachineIndependent/glslang.y"
+  case 422: /* type_specifier_nonarray: TEXTURE1D  */
+#line 2931 "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 9575 "MachineIndependent/glslang_tab.cpp"
+#line 9633 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 420: /* type_specifier_nonarray: F16TEXTURE1D  */
-#line 2911 "MachineIndependent/glslang.y"
+  case 423: /* type_specifier_nonarray: F16TEXTURE1D  */
+#line 2936 "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 9586 "MachineIndependent/glslang_tab.cpp"
+#line 9644 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 421: /* type_specifier_nonarray: F16TEXTURE2D  */
-#line 2917 "MachineIndependent/glslang.y"
+  case 424: /* type_specifier_nonarray: F16TEXTURE2D  */
+#line 2942 "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 9597 "MachineIndependent/glslang_tab.cpp"
+#line 9655 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 422: /* type_specifier_nonarray: F16TEXTURE3D  */
-#line 2923 "MachineIndependent/glslang.y"
+  case 425: /* type_specifier_nonarray: F16TEXTURE3D  */
+#line 2948 "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 9608 "MachineIndependent/glslang_tab.cpp"
+#line 9666 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 423: /* type_specifier_nonarray: F16TEXTURECUBE  */
-#line 2929 "MachineIndependent/glslang.y"
+  case 426: /* type_specifier_nonarray: F16TEXTURECUBE  */
+#line 2954 "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 9619 "MachineIndependent/glslang_tab.cpp"
+#line 9677 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 424: /* type_specifier_nonarray: TEXTURE1DARRAY  */
-#line 2935 "MachineIndependent/glslang.y"
+  case 427: /* type_specifier_nonarray: TEXTURE1DARRAY  */
+#line 2960 "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 9629 "MachineIndependent/glslang_tab.cpp"
+#line 9687 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 425: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
-#line 2940 "MachineIndependent/glslang.y"
+  case 428: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
+#line 2965 "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 9640 "MachineIndependent/glslang_tab.cpp"
+#line 9698 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 426: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
-#line 2946 "MachineIndependent/glslang.y"
+  case 429: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
+#line 2971 "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 9651 "MachineIndependent/glslang_tab.cpp"
+#line 9709 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 427: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
-#line 2952 "MachineIndependent/glslang.y"
+  case 430: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
+#line 2977 "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 9662 "MachineIndependent/glslang_tab.cpp"
+#line 9720 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 428: /* type_specifier_nonarray: ITEXTURE1D  */
-#line 2958 "MachineIndependent/glslang.y"
+  case 431: /* type_specifier_nonarray: ITEXTURE1D  */
+#line 2983 "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 9672 "MachineIndependent/glslang_tab.cpp"
+#line 9730 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 429: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
-#line 2963 "MachineIndependent/glslang.y"
+  case 432: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
+#line 2988 "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 9682 "MachineIndependent/glslang_tab.cpp"
+#line 9740 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 430: /* type_specifier_nonarray: UTEXTURE1D  */
-#line 2968 "MachineIndependent/glslang.y"
+  case 433: /* type_specifier_nonarray: UTEXTURE1D  */
+#line 2993 "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 9692 "MachineIndependent/glslang_tab.cpp"
+#line 9750 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 431: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
-#line 2973 "MachineIndependent/glslang.y"
+  case 434: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
+#line 2998 "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 9702 "MachineIndependent/glslang_tab.cpp"
+#line 9760 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 432: /* type_specifier_nonarray: TEXTURE2DRECT  */
-#line 2978 "MachineIndependent/glslang.y"
+  case 435: /* type_specifier_nonarray: TEXTURE2DRECT  */
+#line 3003 "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 9712 "MachineIndependent/glslang_tab.cpp"
+#line 9770 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 433: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
-#line 2983 "MachineIndependent/glslang.y"
+  case 436: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
+#line 3008 "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 9723 "MachineIndependent/glslang_tab.cpp"
+#line 9781 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 434: /* type_specifier_nonarray: ITEXTURE2DRECT  */
-#line 2989 "MachineIndependent/glslang.y"
+  case 437: /* type_specifier_nonarray: ITEXTURE2DRECT  */
+#line 3014 "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 9733 "MachineIndependent/glslang_tab.cpp"
+#line 9791 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 435: /* type_specifier_nonarray: UTEXTURE2DRECT  */
-#line 2994 "MachineIndependent/glslang.y"
+  case 438: /* type_specifier_nonarray: UTEXTURE2DRECT  */
+#line 3019 "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 9743 "MachineIndependent/glslang_tab.cpp"
+#line 9801 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 436: /* type_specifier_nonarray: TEXTUREBUFFER  */
-#line 2999 "MachineIndependent/glslang.y"
+  case 439: /* type_specifier_nonarray: TEXTUREBUFFER  */
+#line 3024 "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 9753 "MachineIndependent/glslang_tab.cpp"
+#line 9811 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 437: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
-#line 3004 "MachineIndependent/glslang.y"
+  case 440: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
+#line 3029 "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 9764 "MachineIndependent/glslang_tab.cpp"
+#line 9822 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 438: /* type_specifier_nonarray: ITEXTUREBUFFER  */
-#line 3010 "MachineIndependent/glslang.y"
+  case 441: /* type_specifier_nonarray: ITEXTUREBUFFER  */
+#line 3035 "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 9774 "MachineIndependent/glslang_tab.cpp"
+#line 9832 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 439: /* type_specifier_nonarray: UTEXTUREBUFFER  */
-#line 3015 "MachineIndependent/glslang.y"
+  case 442: /* type_specifier_nonarray: UTEXTUREBUFFER  */
+#line 3040 "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 9784 "MachineIndependent/glslang_tab.cpp"
+#line 9842 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 440: /* type_specifier_nonarray: TEXTURE2DMS  */
-#line 3020 "MachineIndependent/glslang.y"
+  case 443: /* type_specifier_nonarray: TEXTURE2DMS  */
+#line 3045 "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 9794 "MachineIndependent/glslang_tab.cpp"
+#line 9852 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 441: /* type_specifier_nonarray: F16TEXTURE2DMS  */
-#line 3025 "MachineIndependent/glslang.y"
+  case 444: /* type_specifier_nonarray: F16TEXTURE2DMS  */
+#line 3050 "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 9805 "MachineIndependent/glslang_tab.cpp"
+#line 9863 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 442: /* type_specifier_nonarray: ITEXTURE2DMS  */
-#line 3031 "MachineIndependent/glslang.y"
+  case 445: /* type_specifier_nonarray: ITEXTURE2DMS  */
+#line 3056 "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 9815 "MachineIndependent/glslang_tab.cpp"
+#line 9873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 443: /* type_specifier_nonarray: UTEXTURE2DMS  */
-#line 3036 "MachineIndependent/glslang.y"
+  case 446: /* type_specifier_nonarray: UTEXTURE2DMS  */
+#line 3061 "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 9825 "MachineIndependent/glslang_tab.cpp"
+#line 9883 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 444: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
-#line 3041 "MachineIndependent/glslang.y"
+  case 447: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
+#line 3066 "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 9835 "MachineIndependent/glslang_tab.cpp"
+#line 9893 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 445: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
-#line 3046 "MachineIndependent/glslang.y"
+  case 448: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
+#line 3071 "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 9846 "MachineIndependent/glslang_tab.cpp"
+#line 9904 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 446: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
-#line 3052 "MachineIndependent/glslang.y"
+  case 449: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
+#line 3077 "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 9856 "MachineIndependent/glslang_tab.cpp"
+#line 9914 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 447: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
-#line 3057 "MachineIndependent/glslang.y"
+  case 450: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
+#line 3082 "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 9866 "MachineIndependent/glslang_tab.cpp"
+#line 9924 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 448: /* type_specifier_nonarray: IMAGE1D  */
-#line 3062 "MachineIndependent/glslang.y"
+  case 451: /* type_specifier_nonarray: IMAGE1D  */
+#line 3087 "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 9876 "MachineIndependent/glslang_tab.cpp"
+#line 9934 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 449: /* type_specifier_nonarray: F16IMAGE1D  */
-#line 3067 "MachineIndependent/glslang.y"
+  case 452: /* type_specifier_nonarray: F16IMAGE1D  */
+#line 3092 "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 9887 "MachineIndependent/glslang_tab.cpp"
+#line 9945 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 450: /* type_specifier_nonarray: IIMAGE1D  */
-#line 3073 "MachineIndependent/glslang.y"
+  case 453: /* type_specifier_nonarray: IIMAGE1D  */
+#line 3098 "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 9897 "MachineIndependent/glslang_tab.cpp"
+#line 9955 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 451: /* type_specifier_nonarray: UIMAGE1D  */
-#line 3078 "MachineIndependent/glslang.y"
+  case 454: /* type_specifier_nonarray: UIMAGE1D  */
+#line 3103 "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 9907 "MachineIndependent/glslang_tab.cpp"
+#line 9965 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 452: /* type_specifier_nonarray: IMAGE2D  */
-#line 3083 "MachineIndependent/glslang.y"
+  case 455: /* type_specifier_nonarray: IMAGE2D  */
+#line 3108 "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 9917 "MachineIndependent/glslang_tab.cpp"
+#line 9975 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 453: /* type_specifier_nonarray: F16IMAGE2D  */
-#line 3088 "MachineIndependent/glslang.y"
+  case 456: /* type_specifier_nonarray: F16IMAGE2D  */
+#line 3113 "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 9928 "MachineIndependent/glslang_tab.cpp"
+#line 9986 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 454: /* type_specifier_nonarray: IIMAGE2D  */
-#line 3094 "MachineIndependent/glslang.y"
+  case 457: /* type_specifier_nonarray: IIMAGE2D  */
+#line 3119 "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 9938 "MachineIndependent/glslang_tab.cpp"
+#line 9996 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 455: /* type_specifier_nonarray: UIMAGE2D  */
-#line 3099 "MachineIndependent/glslang.y"
+  case 458: /* type_specifier_nonarray: UIMAGE2D  */
+#line 3124 "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 9948 "MachineIndependent/glslang_tab.cpp"
+#line 10006 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 456: /* type_specifier_nonarray: IMAGE3D  */
-#line 3104 "MachineIndependent/glslang.y"
+  case 459: /* type_specifier_nonarray: IMAGE3D  */
+#line 3129 "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 9958 "MachineIndependent/glslang_tab.cpp"
+#line 10016 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 457: /* type_specifier_nonarray: F16IMAGE3D  */
-#line 3109 "MachineIndependent/glslang.y"
+  case 460: /* type_specifier_nonarray: F16IMAGE3D  */
+#line 3134 "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 9969 "MachineIndependent/glslang_tab.cpp"
+#line 10027 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 458: /* type_specifier_nonarray: IIMAGE3D  */
-#line 3115 "MachineIndependent/glslang.y"
+  case 461: /* type_specifier_nonarray: IIMAGE3D  */
+#line 3140 "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 9979 "MachineIndependent/glslang_tab.cpp"
+#line 10037 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 459: /* type_specifier_nonarray: UIMAGE3D  */
-#line 3120 "MachineIndependent/glslang.y"
+  case 462: /* type_specifier_nonarray: UIMAGE3D  */
+#line 3145 "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 9989 "MachineIndependent/glslang_tab.cpp"
+#line 10047 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 460: /* type_specifier_nonarray: IMAGE2DRECT  */
-#line 3125 "MachineIndependent/glslang.y"
+  case 463: /* type_specifier_nonarray: IMAGE2DRECT  */
+#line 3150 "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 9999 "MachineIndependent/glslang_tab.cpp"
+#line 10057 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 461: /* type_specifier_nonarray: F16IMAGE2DRECT  */
-#line 3130 "MachineIndependent/glslang.y"
+  case 464: /* type_specifier_nonarray: F16IMAGE2DRECT  */
+#line 3155 "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 10010 "MachineIndependent/glslang_tab.cpp"
+#line 10068 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 462: /* type_specifier_nonarray: IIMAGE2DRECT  */
-#line 3136 "MachineIndependent/glslang.y"
+  case 465: /* type_specifier_nonarray: IIMAGE2DRECT  */
+#line 3161 "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 10020 "MachineIndependent/glslang_tab.cpp"
+#line 10078 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 463: /* type_specifier_nonarray: UIMAGE2DRECT  */
-#line 3141 "MachineIndependent/glslang.y"
+  case 466: /* type_specifier_nonarray: UIMAGE2DRECT  */
+#line 3166 "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 10030 "MachineIndependent/glslang_tab.cpp"
+#line 10088 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 464: /* type_specifier_nonarray: IMAGECUBE  */
-#line 3146 "MachineIndependent/glslang.y"
+  case 467: /* type_specifier_nonarray: IMAGECUBE  */
+#line 3171 "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 10040 "MachineIndependent/glslang_tab.cpp"
+#line 10098 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 465: /* type_specifier_nonarray: F16IMAGECUBE  */
-#line 3151 "MachineIndependent/glslang.y"
+  case 468: /* type_specifier_nonarray: F16IMAGECUBE  */
+#line 3176 "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 10051 "MachineIndependent/glslang_tab.cpp"
+#line 10109 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 466: /* type_specifier_nonarray: IIMAGECUBE  */
-#line 3157 "MachineIndependent/glslang.y"
+  case 469: /* type_specifier_nonarray: IIMAGECUBE  */
+#line 3182 "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 10061 "MachineIndependent/glslang_tab.cpp"
+#line 10119 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 467: /* type_specifier_nonarray: UIMAGECUBE  */
-#line 3162 "MachineIndependent/glslang.y"
+  case 470: /* type_specifier_nonarray: UIMAGECUBE  */
+#line 3187 "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 10071 "MachineIndependent/glslang_tab.cpp"
+#line 10129 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 468: /* type_specifier_nonarray: IMAGEBUFFER  */
-#line 3167 "MachineIndependent/glslang.y"
+  case 471: /* type_specifier_nonarray: IMAGEBUFFER  */
+#line 3192 "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 10081 "MachineIndependent/glslang_tab.cpp"
+#line 10139 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 469: /* type_specifier_nonarray: F16IMAGEBUFFER  */
-#line 3172 "MachineIndependent/glslang.y"
+  case 472: /* type_specifier_nonarray: F16IMAGEBUFFER  */
+#line 3197 "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 10092 "MachineIndependent/glslang_tab.cpp"
+#line 10150 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 470: /* type_specifier_nonarray: IIMAGEBUFFER  */
-#line 3178 "MachineIndependent/glslang.y"
+  case 473: /* type_specifier_nonarray: IIMAGEBUFFER  */
+#line 3203 "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 10102 "MachineIndependent/glslang_tab.cpp"
+#line 10160 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 471: /* type_specifier_nonarray: UIMAGEBUFFER  */
-#line 3183 "MachineIndependent/glslang.y"
+  case 474: /* type_specifier_nonarray: UIMAGEBUFFER  */
+#line 3208 "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 10112 "MachineIndependent/glslang_tab.cpp"
+#line 10170 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 472: /* type_specifier_nonarray: IMAGE1DARRAY  */
-#line 3188 "MachineIndependent/glslang.y"
+  case 475: /* type_specifier_nonarray: IMAGE1DARRAY  */
+#line 3213 "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 10122 "MachineIndependent/glslang_tab.cpp"
+#line 10180 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 473: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
-#line 3193 "MachineIndependent/glslang.y"
+  case 476: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
+#line 3218 "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 10133 "MachineIndependent/glslang_tab.cpp"
+#line 10191 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 474: /* type_specifier_nonarray: IIMAGE1DARRAY  */
-#line 3199 "MachineIndependent/glslang.y"
+  case 477: /* type_specifier_nonarray: IIMAGE1DARRAY  */
+#line 3224 "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 10143 "MachineIndependent/glslang_tab.cpp"
+#line 10201 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 475: /* type_specifier_nonarray: UIMAGE1DARRAY  */
-#line 3204 "MachineIndependent/glslang.y"
+  case 478: /* type_specifier_nonarray: UIMAGE1DARRAY  */
+#line 3229 "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 10153 "MachineIndependent/glslang_tab.cpp"
+#line 10211 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 476: /* type_specifier_nonarray: IMAGE2DARRAY  */
-#line 3209 "MachineIndependent/glslang.y"
+  case 479: /* type_specifier_nonarray: IMAGE2DARRAY  */
+#line 3234 "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 10163 "MachineIndependent/glslang_tab.cpp"
+#line 10221 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 477: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
-#line 3214 "MachineIndependent/glslang.y"
+  case 480: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
+#line 3239 "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 10174 "MachineIndependent/glslang_tab.cpp"
+#line 10232 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 478: /* type_specifier_nonarray: IIMAGE2DARRAY  */
-#line 3220 "MachineIndependent/glslang.y"
+  case 481: /* type_specifier_nonarray: IIMAGE2DARRAY  */
+#line 3245 "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 10184 "MachineIndependent/glslang_tab.cpp"
+#line 10242 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 479: /* type_specifier_nonarray: UIMAGE2DARRAY  */
-#line 3225 "MachineIndependent/glslang.y"
+  case 482: /* type_specifier_nonarray: UIMAGE2DARRAY  */
+#line 3250 "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 10194 "MachineIndependent/glslang_tab.cpp"
+#line 10252 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 480: /* type_specifier_nonarray: IMAGECUBEARRAY  */
-#line 3230 "MachineIndependent/glslang.y"
+  case 483: /* type_specifier_nonarray: IMAGECUBEARRAY  */
+#line 3255 "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 10204 "MachineIndependent/glslang_tab.cpp"
+#line 10262 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 481: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
-#line 3235 "MachineIndependent/glslang.y"
+  case 484: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
+#line 3260 "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 10215 "MachineIndependent/glslang_tab.cpp"
+#line 10273 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 482: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
-#line 3241 "MachineIndependent/glslang.y"
+  case 485: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
+#line 3266 "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 10225 "MachineIndependent/glslang_tab.cpp"
+#line 10283 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 483: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
-#line 3246 "MachineIndependent/glslang.y"
+  case 486: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
+#line 3271 "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 10235 "MachineIndependent/glslang_tab.cpp"
+#line 10293 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 484: /* type_specifier_nonarray: IMAGE2DMS  */
-#line 3251 "MachineIndependent/glslang.y"
+  case 487: /* type_specifier_nonarray: IMAGE2DMS  */
+#line 3276 "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 10245 "MachineIndependent/glslang_tab.cpp"
+#line 10303 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 485: /* type_specifier_nonarray: F16IMAGE2DMS  */
-#line 3256 "MachineIndependent/glslang.y"
+  case 488: /* type_specifier_nonarray: F16IMAGE2DMS  */
+#line 3281 "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 10256 "MachineIndependent/glslang_tab.cpp"
+#line 10314 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 486: /* type_specifier_nonarray: IIMAGE2DMS  */
-#line 3262 "MachineIndependent/glslang.y"
+  case 489: /* type_specifier_nonarray: IIMAGE2DMS  */
+#line 3287 "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 10266 "MachineIndependent/glslang_tab.cpp"
+#line 10324 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 487: /* type_specifier_nonarray: UIMAGE2DMS  */
-#line 3267 "MachineIndependent/glslang.y"
+  case 490: /* type_specifier_nonarray: UIMAGE2DMS  */
+#line 3292 "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 10276 "MachineIndependent/glslang_tab.cpp"
+#line 10334 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 488: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
-#line 3272 "MachineIndependent/glslang.y"
+  case 491: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
+#line 3297 "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 10286 "MachineIndependent/glslang_tab.cpp"
+#line 10344 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 489: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
-#line 3277 "MachineIndependent/glslang.y"
+  case 492: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
+#line 3302 "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 10297 "MachineIndependent/glslang_tab.cpp"
+#line 10355 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 490: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
-#line 3283 "MachineIndependent/glslang.y"
+  case 493: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
+#line 3308 "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 10307 "MachineIndependent/glslang_tab.cpp"
+#line 10365 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 491: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
-#line 3288 "MachineIndependent/glslang.y"
+  case 494: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
+#line 3313 "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 10317 "MachineIndependent/glslang_tab.cpp"
+#line 10375 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 492: /* type_specifier_nonarray: I64IMAGE1D  */
-#line 3293 "MachineIndependent/glslang.y"
+  case 495: /* type_specifier_nonarray: I64IMAGE1D  */
+#line 3318 "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 10327 "MachineIndependent/glslang_tab.cpp"
+#line 10385 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 493: /* type_specifier_nonarray: U64IMAGE1D  */
-#line 3298 "MachineIndependent/glslang.y"
+  case 496: /* type_specifier_nonarray: U64IMAGE1D  */
+#line 3323 "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 10337 "MachineIndependent/glslang_tab.cpp"
+#line 10395 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 494: /* type_specifier_nonarray: I64IMAGE2D  */
-#line 3303 "MachineIndependent/glslang.y"
+  case 497: /* type_specifier_nonarray: I64IMAGE2D  */
+#line 3328 "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 10347 "MachineIndependent/glslang_tab.cpp"
+#line 10405 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 495: /* type_specifier_nonarray: U64IMAGE2D  */
-#line 3308 "MachineIndependent/glslang.y"
+  case 498: /* type_specifier_nonarray: U64IMAGE2D  */
+#line 3333 "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 10357 "MachineIndependent/glslang_tab.cpp"
+#line 10415 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 496: /* type_specifier_nonarray: I64IMAGE3D  */
-#line 3313 "MachineIndependent/glslang.y"
+  case 499: /* type_specifier_nonarray: I64IMAGE3D  */
+#line 3338 "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 10367 "MachineIndependent/glslang_tab.cpp"
+#line 10425 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 497: /* type_specifier_nonarray: U64IMAGE3D  */
-#line 3318 "MachineIndependent/glslang.y"
+  case 500: /* type_specifier_nonarray: U64IMAGE3D  */
+#line 3343 "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 10377 "MachineIndependent/glslang_tab.cpp"
+#line 10435 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 498: /* type_specifier_nonarray: I64IMAGE2DRECT  */
-#line 3323 "MachineIndependent/glslang.y"
+  case 501: /* type_specifier_nonarray: I64IMAGE2DRECT  */
+#line 3348 "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 10387 "MachineIndependent/glslang_tab.cpp"
+#line 10445 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 499: /* type_specifier_nonarray: U64IMAGE2DRECT  */
-#line 3328 "MachineIndependent/glslang.y"
+  case 502: /* type_specifier_nonarray: U64IMAGE2DRECT  */
+#line 3353 "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 10397 "MachineIndependent/glslang_tab.cpp"
+#line 10455 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 500: /* type_specifier_nonarray: I64IMAGECUBE  */
-#line 3333 "MachineIndependent/glslang.y"
+  case 503: /* type_specifier_nonarray: I64IMAGECUBE  */
+#line 3358 "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 10407 "MachineIndependent/glslang_tab.cpp"
+#line 10465 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 501: /* type_specifier_nonarray: U64IMAGECUBE  */
-#line 3338 "MachineIndependent/glslang.y"
+  case 504: /* type_specifier_nonarray: U64IMAGECUBE  */
+#line 3363 "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 10417 "MachineIndependent/glslang_tab.cpp"
+#line 10475 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 502: /* type_specifier_nonarray: I64IMAGEBUFFER  */
-#line 3343 "MachineIndependent/glslang.y"
+  case 505: /* type_specifier_nonarray: I64IMAGEBUFFER  */
+#line 3368 "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 10427 "MachineIndependent/glslang_tab.cpp"
+#line 10485 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 503: /* type_specifier_nonarray: U64IMAGEBUFFER  */
-#line 3348 "MachineIndependent/glslang.y"
+  case 506: /* type_specifier_nonarray: U64IMAGEBUFFER  */
+#line 3373 "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 10437 "MachineIndependent/glslang_tab.cpp"
+#line 10495 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 504: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
-#line 3353 "MachineIndependent/glslang.y"
+  case 507: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
+#line 3378 "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 10447 "MachineIndependent/glslang_tab.cpp"
+#line 10505 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 505: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
-#line 3358 "MachineIndependent/glslang.y"
+  case 508: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
+#line 3383 "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 10457 "MachineIndependent/glslang_tab.cpp"
+#line 10515 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 506: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
-#line 3363 "MachineIndependent/glslang.y"
+  case 509: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
+#line 3388 "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 10467 "MachineIndependent/glslang_tab.cpp"
+#line 10525 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 507: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
-#line 3368 "MachineIndependent/glslang.y"
+  case 510: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
+#line 3393 "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 10477 "MachineIndependent/glslang_tab.cpp"
+#line 10535 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 508: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
-#line 3373 "MachineIndependent/glslang.y"
+  case 511: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
+#line 3398 "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 10487 "MachineIndependent/glslang_tab.cpp"
+#line 10545 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 509: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
-#line 3378 "MachineIndependent/glslang.y"
+  case 512: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
+#line 3403 "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 10497 "MachineIndependent/glslang_tab.cpp"
+#line 10555 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 510: /* type_specifier_nonarray: I64IMAGE2DMS  */
-#line 3383 "MachineIndependent/glslang.y"
+  case 513: /* type_specifier_nonarray: I64IMAGE2DMS  */
+#line 3408 "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 10507 "MachineIndependent/glslang_tab.cpp"
+#line 10565 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 511: /* type_specifier_nonarray: U64IMAGE2DMS  */
-#line 3388 "MachineIndependent/glslang.y"
+  case 514: /* type_specifier_nonarray: U64IMAGE2DMS  */
+#line 3413 "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 10517 "MachineIndependent/glslang_tab.cpp"
+#line 10575 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 512: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
-#line 3393 "MachineIndependent/glslang.y"
+  case 515: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
+#line 3418 "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 10527 "MachineIndependent/glslang_tab.cpp"
+#line 10585 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 513: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
-#line 3398 "MachineIndependent/glslang.y"
+  case 516: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
+#line 3423 "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 10537 "MachineIndependent/glslang_tab.cpp"
+#line 10595 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 514: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
-#line 3403 "MachineIndependent/glslang.y"
+  case 517: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
+#line 3428 "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 10548 "MachineIndependent/glslang_tab.cpp"
+#line 10606 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 515: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
-#line 3409 "MachineIndependent/glslang.y"
+  case 518: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
+#line 3434 "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 10559 "MachineIndependent/glslang_tab.cpp"
+#line 10617 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 516: /* type_specifier_nonarray: SUBPASSINPUT  */
-#line 3415 "MachineIndependent/glslang.y"
+  case 519: /* type_specifier_nonarray: SUBPASSINPUT  */
+#line 3440 "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 10570 "MachineIndependent/glslang_tab.cpp"
+#line 10628 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 517: /* type_specifier_nonarray: SUBPASSINPUTMS  */
-#line 3421 "MachineIndependent/glslang.y"
+  case 520: /* type_specifier_nonarray: SUBPASSINPUTMS  */
+#line 3446 "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 10581 "MachineIndependent/glslang_tab.cpp"
+#line 10639 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 518: /* type_specifier_nonarray: F16SUBPASSINPUT  */
-#line 3427 "MachineIndependent/glslang.y"
+  case 521: /* type_specifier_nonarray: F16SUBPASSINPUT  */
+#line 3452 "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");
@@ -10589,11 +10647,11 @@
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
     }
-#line 10593 "MachineIndependent/glslang_tab.cpp"
+#line 10651 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 519: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
-#line 3434 "MachineIndependent/glslang.y"
+  case 522: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
+#line 3459 "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");
@@ -10601,107 +10659,107 @@
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
     }
-#line 10605 "MachineIndependent/glslang_tab.cpp"
+#line 10663 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 520: /* type_specifier_nonarray: ISUBPASSINPUT  */
-#line 3441 "MachineIndependent/glslang.y"
+  case 523: /* type_specifier_nonarray: ISUBPASSINPUT  */
+#line 3466 "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 10616 "MachineIndependent/glslang_tab.cpp"
+#line 10674 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 521: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
-#line 3447 "MachineIndependent/glslang.y"
+  case 524: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
+#line 3472 "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 10627 "MachineIndependent/glslang_tab.cpp"
+#line 10685 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 522: /* type_specifier_nonarray: USUBPASSINPUT  */
-#line 3453 "MachineIndependent/glslang.y"
+  case 525: /* type_specifier_nonarray: USUBPASSINPUT  */
+#line 3478 "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 10638 "MachineIndependent/glslang_tab.cpp"
+#line 10696 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 523: /* type_specifier_nonarray: USUBPASSINPUTMS  */
-#line 3459 "MachineIndependent/glslang.y"
+  case 526: /* type_specifier_nonarray: USUBPASSINPUTMS  */
+#line 3484 "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 10649 "MachineIndependent/glslang_tab.cpp"
+#line 10707 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 524: /* type_specifier_nonarray: FCOOPMATNV  */
-#line 3465 "MachineIndependent/glslang.y"
+  case 527: /* type_specifier_nonarray: FCOOPMATNV  */
+#line 3490 "MachineIndependent/glslang.y"
                  {
         parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).coopmat = true;
     }
-#line 10660 "MachineIndependent/glslang_tab.cpp"
+#line 10718 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 525: /* type_specifier_nonarray: ICOOPMATNV  */
-#line 3471 "MachineIndependent/glslang.y"
+  case 528: /* type_specifier_nonarray: ICOOPMATNV  */
+#line 3496 "MachineIndependent/glslang.y"
                  {
         parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).coopmat = true;
     }
-#line 10671 "MachineIndependent/glslang_tab.cpp"
+#line 10729 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 526: /* type_specifier_nonarray: UCOOPMATNV  */
-#line 3477 "MachineIndependent/glslang.y"
+  case 529: /* type_specifier_nonarray: UCOOPMATNV  */
+#line 3502 "MachineIndependent/glslang.y"
                  {
         parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).coopmat = true;
     }
-#line 10682 "MachineIndependent/glslang_tab.cpp"
+#line 10740 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 527: /* type_specifier_nonarray: spirv_type_specifier  */
-#line 3483 "MachineIndependent/glslang.y"
+  case 530: /* type_specifier_nonarray: spirv_type_specifier  */
+#line 3508 "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 10691 "MachineIndependent/glslang_tab.cpp"
+#line 10749 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 528: /* type_specifier_nonarray: struct_specifier  */
-#line 3488 "MachineIndependent/glslang.y"
+  case 531: /* type_specifier_nonarray: struct_specifier  */
+#line 3513 "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 10701 "MachineIndependent/glslang_tab.cpp"
+#line 10759 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 529: /* type_specifier_nonarray: TYPE_NAME  */
-#line 3493 "MachineIndependent/glslang.y"
+  case 532: /* type_specifier_nonarray: TYPE_NAME  */
+#line 3518 "MachineIndependent/glslang.y"
                 {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -10715,47 +10773,47 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 10719 "MachineIndependent/glslang_tab.cpp"
+#line 10777 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 530: /* precision_qualifier: HIGH_PRECISION  */
-#line 3509 "MachineIndependent/glslang.y"
+  case 533: /* precision_qualifier: HIGH_PRECISION  */
+#line 3534 "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 10729 "MachineIndependent/glslang_tab.cpp"
+#line 10787 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 531: /* precision_qualifier: MEDIUM_PRECISION  */
-#line 3514 "MachineIndependent/glslang.y"
+  case 534: /* precision_qualifier: MEDIUM_PRECISION  */
+#line 3539 "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 10739 "MachineIndependent/glslang_tab.cpp"
+#line 10797 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 532: /* precision_qualifier: LOW_PRECISION  */
-#line 3519 "MachineIndependent/glslang.y"
+  case 535: /* precision_qualifier: LOW_PRECISION  */
+#line 3544 "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 10749 "MachineIndependent/glslang_tab.cpp"
+#line 10807 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 533: /* $@3: %empty  */
-#line 3527 "MachineIndependent/glslang.y"
+  case 536: /* $@3: %empty  */
+#line 3552 "MachineIndependent/glslang.y"
                                    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 10755 "MachineIndependent/glslang_tab.cpp"
+#line 10813 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 534: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
-#line 3527 "MachineIndependent/glslang.y"
+  case 537: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
+#line 3552 "MachineIndependent/glslang.y"
                                                                                                                    {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -10767,17 +10825,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 10771 "MachineIndependent/glslang_tab.cpp"
+#line 10829 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 535: /* $@4: %empty  */
-#line 3538 "MachineIndependent/glslang.y"
+  case 538: /* $@4: %empty  */
+#line 3563 "MachineIndependent/glslang.y"
                         { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 10777 "MachineIndependent/glslang_tab.cpp"
+#line 10835 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 536: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
-#line 3538 "MachineIndependent/glslang.y"
+  case 539: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
+#line 3563 "MachineIndependent/glslang.y"
                                                                                                         {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -10785,19 +10843,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 10789 "MachineIndependent/glslang_tab.cpp"
+#line 10847 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 537: /* struct_declaration_list: struct_declaration  */
-#line 3548 "MachineIndependent/glslang.y"
+  case 540: /* struct_declaration_list: struct_declaration  */
+#line 3573 "MachineIndependent/glslang.y"
                          {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 10797 "MachineIndependent/glslang_tab.cpp"
+#line 10855 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 538: /* struct_declaration_list: struct_declaration_list struct_declaration  */
-#line 3551 "MachineIndependent/glslang.y"
+  case 541: /* struct_declaration_list: struct_declaration_list struct_declaration  */
+#line 3576 "MachineIndependent/glslang.y"
                                                  {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -10808,11 +10866,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 10812 "MachineIndependent/glslang_tab.cpp"
+#line 10870 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 539: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
-#line 3564 "MachineIndependent/glslang.y"
+  case 542: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
+#line 3589 "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");
@@ -10835,11 +10893,11 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 10839 "MachineIndependent/glslang_tab.cpp"
+#line 10897 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 540: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
-#line 3586 "MachineIndependent/glslang.y"
+  case 543: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
+#line 3611 "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");
@@ -10864,38 +10922,38 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 10868 "MachineIndependent/glslang_tab.cpp"
+#line 10926 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 541: /* struct_declarator_list: struct_declarator  */
-#line 3613 "MachineIndependent/glslang.y"
+  case 544: /* struct_declarator_list: struct_declarator  */
+#line 3638 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 10877 "MachineIndependent/glslang_tab.cpp"
+#line 10935 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 542: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
-#line 3617 "MachineIndependent/glslang.y"
+  case 545: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
+#line 3642 "MachineIndependent/glslang.y"
                                                      {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 10885 "MachineIndependent/glslang_tab.cpp"
+#line 10943 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 543: /* struct_declarator: IDENTIFIER  */
-#line 3623 "MachineIndependent/glslang.y"
+  case 546: /* struct_declarator: IDENTIFIER  */
+#line 3648 "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 10895 "MachineIndependent/glslang_tab.cpp"
+#line 10953 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 544: /* struct_declarator: IDENTIFIER array_specifier  */
-#line 3628 "MachineIndependent/glslang.y"
+  case 547: /* struct_declarator: IDENTIFIER array_specifier  */
+#line 3653 "MachineIndependent/glslang.y"
                                  {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
@@ -10904,246 +10962,246 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 10908 "MachineIndependent/glslang_tab.cpp"
+#line 10966 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 545: /* initializer: assignment_expression  */
-#line 3639 "MachineIndependent/glslang.y"
+  case 548: /* initializer: assignment_expression  */
+#line 3664 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10916 "MachineIndependent/glslang_tab.cpp"
+#line 10974 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 546: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
-#line 3643 "MachineIndependent/glslang.y"
+  case 549: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
+#line 3668 "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 10927 "MachineIndependent/glslang_tab.cpp"
+#line 10985 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 547: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
-#line 3649 "MachineIndependent/glslang.y"
+  case 550: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
+#line 3674 "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 10938 "MachineIndependent/glslang_tab.cpp"
+#line 10996 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 548: /* initializer: LEFT_BRACE RIGHT_BRACE  */
-#line 3655 "MachineIndependent/glslang.y"
+  case 551: /* initializer: LEFT_BRACE RIGHT_BRACE  */
+#line 3680 "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 10949 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 549: /* initializer_list: initializer  */
-#line 3666 "MachineIndependent/glslang.y"
-                  {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
-    }
-#line 10957 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 550: /* initializer_list: initializer_list COMMA initializer  */
-#line 3669 "MachineIndependent/glslang.y"
-                                         {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-    }
-#line 10965 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 551: /* declaration_statement: declaration  */
-#line 3676 "MachineIndependent/glslang.y"
-                  { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 10971 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 552: /* statement: compound_statement  */
-#line 3680 "MachineIndependent/glslang.y"
-                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 10977 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 553: /* statement: simple_statement  */
-#line 3681 "MachineIndependent/glslang.y"
-                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 10983 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 554: /* simple_statement: declaration_statement  */
-#line 3687 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 10989 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 555: /* simple_statement: expression_statement  */
-#line 3688 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 10995 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 556: /* simple_statement: selection_statement  */
-#line 3689 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11001 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 557: /* simple_statement: switch_statement  */
-#line 3690 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 #line 11007 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 558: /* simple_statement: case_label  */
+  case 552: /* initializer_list: initializer  */
 #line 3691 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11013 "MachineIndependent/glslang_tab.cpp"
+                  {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
+    }
+#line 11015 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 559: /* simple_statement: iteration_statement  */
-#line 3692 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11019 "MachineIndependent/glslang_tab.cpp"
+  case 553: /* initializer_list: initializer_list COMMA initializer  */
+#line 3694 "MachineIndependent/glslang.y"
+                                         {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+    }
+#line 11023 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 560: /* simple_statement: jump_statement  */
-#line 3693 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11025 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 561: /* simple_statement: demote_statement  */
-#line 3695 "MachineIndependent/glslang.y"
-                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11031 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 562: /* demote_statement: DEMOTE SEMICOLON  */
+  case 554: /* declaration_statement: declaration  */
 #line 3701 "MachineIndependent/glslang.y"
+                  { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11029 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 555: /* statement: compound_statement  */
+#line 3705 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11035 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 556: /* statement: simple_statement  */
+#line 3706 "MachineIndependent/glslang.y"
+                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11041 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 557: /* simple_statement: declaration_statement  */
+#line 3712 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11047 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 558: /* simple_statement: expression_statement  */
+#line 3713 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11053 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 559: /* simple_statement: selection_statement  */
+#line 3714 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11059 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 560: /* simple_statement: switch_statement  */
+#line 3715 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11065 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 561: /* simple_statement: case_label  */
+#line 3716 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11071 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 562: /* simple_statement: iteration_statement  */
+#line 3717 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11077 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 563: /* simple_statement: jump_statement  */
+#line 3718 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11083 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 564: /* simple_statement: demote_statement  */
+#line 3720 "MachineIndependent/glslang.y"
+                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 11089 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 565: /* demote_statement: DEMOTE SEMICOLON  */
+#line 3726 "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 11041 "MachineIndependent/glslang_tab.cpp"
+#line 11099 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 563: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
-#line 3710 "MachineIndependent/glslang.y"
+  case 566: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
+#line 3735 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermNode) = 0; }
-#line 11047 "MachineIndependent/glslang_tab.cpp"
+#line 11105 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 564: /* $@5: %empty  */
-#line 3711 "MachineIndependent/glslang.y"
+  case 567: /* $@5: %empty  */
+#line 3736 "MachineIndependent/glslang.y"
                  {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 11056 "MachineIndependent/glslang_tab.cpp"
+#line 11114 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 565: /* $@6: %empty  */
-#line 3715 "MachineIndependent/glslang.y"
+  case 568: /* $@6: %empty  */
+#line 3740 "MachineIndependent/glslang.y"
                      {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 11065 "MachineIndependent/glslang_tab.cpp"
+#line 11123 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 566: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE  */
-#line 3719 "MachineIndependent/glslang.y"
+  case 569: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE  */
+#line 3744 "MachineIndependent/glslang.y"
                   {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
-            (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
+            (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 11075 "MachineIndependent/glslang_tab.cpp"
+#line 11133 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 567: /* statement_no_new_scope: compound_statement_no_new_scope  */
-#line 3727 "MachineIndependent/glslang.y"
+  case 570: /* statement_no_new_scope: compound_statement_no_new_scope  */
+#line 3752 "MachineIndependent/glslang.y"
                                       { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11081 "MachineIndependent/glslang_tab.cpp"
+#line 11139 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 568: /* statement_no_new_scope: simple_statement  */
-#line 3728 "MachineIndependent/glslang.y"
+  case 571: /* statement_no_new_scope: simple_statement  */
+#line 3753 "MachineIndependent/glslang.y"
                                       { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11087 "MachineIndependent/glslang_tab.cpp"
+#line 11145 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 569: /* $@7: %empty  */
-#line 3732 "MachineIndependent/glslang.y"
+  case 572: /* $@7: %empty  */
+#line 3757 "MachineIndependent/glslang.y"
       {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11095 "MachineIndependent/glslang_tab.cpp"
+#line 11153 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 570: /* statement_scoped: $@7 compound_statement  */
-#line 3735 "MachineIndependent/glslang.y"
+  case 573: /* statement_scoped: $@7 compound_statement  */
+#line 3760 "MachineIndependent/glslang.y"
                           {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11104 "MachineIndependent/glslang_tab.cpp"
+#line 11162 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 571: /* $@8: %empty  */
-#line 3739 "MachineIndependent/glslang.y"
+  case 574: /* $@8: %empty  */
+#line 3764 "MachineIndependent/glslang.y"
       {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11114 "MachineIndependent/glslang_tab.cpp"
+#line 11172 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 572: /* statement_scoped: $@8 simple_statement  */
-#line 3744 "MachineIndependent/glslang.y"
+  case 575: /* statement_scoped: $@8 simple_statement  */
+#line 3769 "MachineIndependent/glslang.y"
                        {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11125 "MachineIndependent/glslang_tab.cpp"
+#line 11183 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 573: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
-#line 3753 "MachineIndependent/glslang.y"
+  case 576: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
+#line 3778 "MachineIndependent/glslang.y"
                              {
         (yyval.interm.intermNode) = 0;
     }
-#line 11133 "MachineIndependent/glslang_tab.cpp"
+#line 11191 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 574: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
-#line 3756 "MachineIndependent/glslang.y"
+  case 577: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
+#line 3781 "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 11143 "MachineIndependent/glslang_tab.cpp"
+#line 11201 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 575: /* statement_list: statement  */
-#line 3764 "MachineIndependent/glslang.y"
+  case 578: /* statement_list: statement  */
+#line 3789 "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 ||
@@ -11152,11 +11210,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 11156 "MachineIndependent/glslang_tab.cpp"
+#line 11214 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 576: /* statement_list: statement_list statement  */
-#line 3772 "MachineIndependent/glslang.y"
+  case 579: /* statement_list: statement_list statement  */
+#line 3797 "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)) {
@@ -11165,77 +11223,77 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 11169 "MachineIndependent/glslang_tab.cpp"
+#line 11227 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 577: /* expression_statement: SEMICOLON  */
-#line 3783 "MachineIndependent/glslang.y"
+  case 580: /* expression_statement: SEMICOLON  */
+#line 3808 "MachineIndependent/glslang.y"
                  { (yyval.interm.intermNode) = 0; }
-#line 11175 "MachineIndependent/glslang_tab.cpp"
+#line 11233 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 578: /* expression_statement: expression SEMICOLON  */
-#line 3784 "MachineIndependent/glslang.y"
+  case 581: /* expression_statement: expression SEMICOLON  */
+#line 3809 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 11181 "MachineIndependent/glslang_tab.cpp"
+#line 11239 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 579: /* selection_statement: selection_statement_nonattributed  */
-#line 3788 "MachineIndependent/glslang.y"
+  case 582: /* selection_statement: selection_statement_nonattributed  */
+#line 3813 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11189 "MachineIndependent/glslang_tab.cpp"
+#line 11247 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 580: /* selection_statement: attribute selection_statement_nonattributed  */
-#line 3792 "MachineIndependent/glslang.y"
+  case 583: /* selection_statement: attribute selection_statement_nonattributed  */
+#line 3817 "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 11199 "MachineIndependent/glslang_tab.cpp"
+#line 11257 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 581: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
-#line 3800 "MachineIndependent/glslang.y"
+  case 584: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
+#line 3825 "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 11208 "MachineIndependent/glslang_tab.cpp"
+#line 11266 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 582: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
-#line 3807 "MachineIndependent/glslang.y"
+  case 585: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
+#line 3832 "MachineIndependent/glslang.y"
                                              {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 11217 "MachineIndependent/glslang_tab.cpp"
+#line 11275 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 583: /* selection_rest_statement: statement_scoped  */
-#line 3811 "MachineIndependent/glslang.y"
+  case 586: /* selection_rest_statement: statement_scoped  */
+#line 3836 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 11226 "MachineIndependent/glslang_tab.cpp"
+#line 11284 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 584: /* condition: expression  */
-#line 3819 "MachineIndependent/glslang.y"
+  case 587: /* condition: expression  */
+#line 3844 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 11235 "MachineIndependent/glslang_tab.cpp"
+#line 11293 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 585: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
-#line 3823 "MachineIndependent/glslang.y"
+  case 588: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
+#line 3848 "MachineIndependent/glslang.y"
                                                         {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -11246,29 +11304,29 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 11250 "MachineIndependent/glslang_tab.cpp"
+#line 11308 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 586: /* switch_statement: switch_statement_nonattributed  */
-#line 3836 "MachineIndependent/glslang.y"
+  case 589: /* switch_statement: switch_statement_nonattributed  */
+#line 3861 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11258 "MachineIndependent/glslang_tab.cpp"
+#line 11316 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 587: /* switch_statement: attribute switch_statement_nonattributed  */
-#line 3840 "MachineIndependent/glslang.y"
+  case 590: /* switch_statement: attribute switch_statement_nonattributed  */
+#line 3865 "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 11268 "MachineIndependent/glslang_tab.cpp"
+#line 11326 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 588: /* $@9: %empty  */
-#line 3848 "MachineIndependent/glslang.y"
+  case 591: /* $@9: %empty  */
+#line 3873 "MachineIndependent/glslang.y"
                                                {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -11277,11 +11335,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 11281 "MachineIndependent/glslang_tab.cpp"
+#line 11339 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 589: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
-#line 3856 "MachineIndependent/glslang.y"
+  case 592: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
+#line 3881 "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();
@@ -11291,27 +11349,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11295 "MachineIndependent/glslang_tab.cpp"
+#line 11353 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 590: /* switch_statement_list: %empty  */
-#line 3868 "MachineIndependent/glslang.y"
+  case 593: /* switch_statement_list: %empty  */
+#line 3893 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = 0;
     }
-#line 11303 "MachineIndependent/glslang_tab.cpp"
+#line 11361 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 591: /* switch_statement_list: statement_list  */
-#line 3871 "MachineIndependent/glslang.y"
+  case 594: /* switch_statement_list: statement_list  */
+#line 3896 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11311 "MachineIndependent/glslang_tab.cpp"
+#line 11369 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 592: /* case_label: CASE expression COLON  */
-#line 3877 "MachineIndependent/glslang.y"
+  case 595: /* case_label: CASE expression COLON  */
+#line 3902 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -11324,11 +11382,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 11328 "MachineIndependent/glslang_tab.cpp"
+#line 11386 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 593: /* case_label: DEFAULT COLON  */
-#line 3889 "MachineIndependent/glslang.y"
+  case 596: /* case_label: DEFAULT COLON  */
+#line 3914 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -11338,29 +11396,29 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 11342 "MachineIndependent/glslang_tab.cpp"
+#line 11400 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 594: /* iteration_statement: iteration_statement_nonattributed  */
-#line 3901 "MachineIndependent/glslang.y"
+  case 597: /* iteration_statement: iteration_statement_nonattributed  */
+#line 3926 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11350 "MachineIndependent/glslang_tab.cpp"
+#line 11408 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 595: /* iteration_statement: attribute iteration_statement_nonattributed  */
-#line 3905 "MachineIndependent/glslang.y"
+  case 598: /* iteration_statement: attribute iteration_statement_nonattributed  */
+#line 3930 "MachineIndependent/glslang.y"
                                                   {
         parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11360 "MachineIndependent/glslang_tab.cpp"
+#line 11418 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 596: /* $@10: %empty  */
-#line 3913 "MachineIndependent/glslang.y"
+  case 599: /* $@10: %empty  */
+#line 3938 "MachineIndependent/glslang.y"
                        {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -11369,11 +11427,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11373 "MachineIndependent/glslang_tab.cpp"
+#line 11431 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 597: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope  */
-#line 3921 "MachineIndependent/glslang.y"
+  case 600: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope  */
+#line 3946 "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);
@@ -11381,22 +11439,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11385 "MachineIndependent/glslang_tab.cpp"
+#line 11443 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 598: /* $@11: %empty  */
-#line 3928 "MachineIndependent/glslang.y"
+  case 601: /* $@11: %empty  */
+#line 3953 "MachineIndependent/glslang.y"
          {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11396 "MachineIndependent/glslang_tab.cpp"
+#line 11454 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 599: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
-#line 3934 "MachineIndependent/glslang.y"
+  case 602: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
+#line 3959 "MachineIndependent/glslang.y"
                                                                   {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -11409,22 +11467,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11413 "MachineIndependent/glslang_tab.cpp"
+#line 11471 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 600: /* $@12: %empty  */
-#line 3946 "MachineIndependent/glslang.y"
+  case 603: /* $@12: %empty  */
+#line 3971 "MachineIndependent/glslang.y"
                      {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11424 "MachineIndependent/glslang_tab.cpp"
+#line 11482 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 601: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
-#line 3952 "MachineIndependent/glslang.y"
+  case 604: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
+#line 3977 "MachineIndependent/glslang.y"
                                                                                {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -11437,81 +11495,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11441 "MachineIndependent/glslang_tab.cpp"
+#line 11499 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 602: /* for_init_statement: expression_statement  */
-#line 3967 "MachineIndependent/glslang.y"
+  case 605: /* for_init_statement: expression_statement  */
+#line 3992 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11449 "MachineIndependent/glslang_tab.cpp"
+#line 11507 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 603: /* for_init_statement: declaration_statement  */
-#line 3970 "MachineIndependent/glslang.y"
+  case 606: /* for_init_statement: declaration_statement  */
+#line 3995 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11457 "MachineIndependent/glslang_tab.cpp"
+#line 11515 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 604: /* conditionopt: condition  */
-#line 3976 "MachineIndependent/glslang.y"
+  case 607: /* conditionopt: condition  */
+#line 4001 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 11465 "MachineIndependent/glslang_tab.cpp"
+#line 11523 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 605: /* conditionopt: %empty  */
-#line 3979 "MachineIndependent/glslang.y"
+  case 608: /* conditionopt: %empty  */
+#line 4004 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 11473 "MachineIndependent/glslang_tab.cpp"
+#line 11531 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 606: /* for_rest_statement: conditionopt SEMICOLON  */
-#line 3985 "MachineIndependent/glslang.y"
+  case 609: /* for_rest_statement: conditionopt SEMICOLON  */
+#line 4010 "MachineIndependent/glslang.y"
                              {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 11482 "MachineIndependent/glslang_tab.cpp"
+#line 11540 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 607: /* for_rest_statement: conditionopt SEMICOLON expression  */
-#line 3989 "MachineIndependent/glslang.y"
+  case 610: /* for_rest_statement: conditionopt SEMICOLON expression  */
+#line 4014 "MachineIndependent/glslang.y"
                                          {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 11491 "MachineIndependent/glslang_tab.cpp"
+#line 11549 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 608: /* jump_statement: CONTINUE SEMICOLON  */
-#line 3996 "MachineIndependent/glslang.y"
+  case 611: /* jump_statement: CONTINUE SEMICOLON  */
+#line 4021 "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 11501 "MachineIndependent/glslang_tab.cpp"
+#line 11559 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 609: /* jump_statement: BREAK SEMICOLON  */
-#line 4001 "MachineIndependent/glslang.y"
+  case 612: /* jump_statement: BREAK SEMICOLON  */
+#line 4026 "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 11511 "MachineIndependent/glslang_tab.cpp"
+#line 11569 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 610: /* jump_statement: RETURN SEMICOLON  */
-#line 4006 "MachineIndependent/glslang.y"
+  case 613: /* jump_statement: RETURN SEMICOLON  */
+#line 4031 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -11519,101 +11577,101 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 11523 "MachineIndependent/glslang_tab.cpp"
+#line 11581 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 611: /* jump_statement: RETURN expression SEMICOLON  */
-#line 4013 "MachineIndependent/glslang.y"
+  case 614: /* jump_statement: RETURN expression SEMICOLON  */
+#line 4038 "MachineIndependent/glslang.y"
                                   {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 11531 "MachineIndependent/glslang_tab.cpp"
+#line 11589 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 612: /* jump_statement: DISCARD SEMICOLON  */
-#line 4016 "MachineIndependent/glslang.y"
+  case 615: /* jump_statement: DISCARD SEMICOLON  */
+#line 4041 "MachineIndependent/glslang.y"
                         {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 11540 "MachineIndependent/glslang_tab.cpp"
+#line 11598 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 613: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
-#line 4020 "MachineIndependent/glslang.y"
+  case 616: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
+#line 4045 "MachineIndependent/glslang.y"
                                      {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc);
     }
-#line 11549 "MachineIndependent/glslang_tab.cpp"
+#line 11607 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 614: /* jump_statement: TERMINATE_RAY SEMICOLON  */
-#line 4025 "MachineIndependent/glslang.y"
+  case 617: /* jump_statement: TERMINATE_RAY SEMICOLON  */
+#line 4050 "MachineIndependent/glslang.y"
                               {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc);
     }
-#line 11558 "MachineIndependent/glslang_tab.cpp"
+#line 11616 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 615: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
-#line 4029 "MachineIndependent/glslang.y"
+  case 618: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
+#line 4054 "MachineIndependent/glslang.y"
                                     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc);
     }
-#line 11567 "MachineIndependent/glslang_tab.cpp"
+#line 11625 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 616: /* translation_unit: external_declaration  */
-#line 4039 "MachineIndependent/glslang.y"
+  case 619: /* translation_unit: external_declaration  */
+#line 4064 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 11576 "MachineIndependent/glslang_tab.cpp"
+#line 11634 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 617: /* translation_unit: translation_unit external_declaration  */
-#line 4043 "MachineIndependent/glslang.y"
+  case 620: /* translation_unit: translation_unit external_declaration  */
+#line 4068 "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 11587 "MachineIndependent/glslang_tab.cpp"
+#line 11645 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 618: /* external_declaration: function_definition  */
-#line 4052 "MachineIndependent/glslang.y"
+  case 621: /* external_declaration: function_definition  */
+#line 4077 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11595 "MachineIndependent/glslang_tab.cpp"
+#line 11653 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 619: /* external_declaration: declaration  */
-#line 4055 "MachineIndependent/glslang.y"
+  case 622: /* external_declaration: declaration  */
+#line 4080 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11603 "MachineIndependent/glslang_tab.cpp"
+#line 11661 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 620: /* external_declaration: SEMICOLON  */
-#line 4059 "MachineIndependent/glslang.y"
+  case 623: /* external_declaration: SEMICOLON  */
+#line 4084 "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 11613 "MachineIndependent/glslang_tab.cpp"
+#line 11671 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 621: /* $@13: %empty  */
-#line 4068 "MachineIndependent/glslang.y"
+  case 624: /* $@13: %empty  */
+#line 4093 "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);
@@ -11626,11 +11684,11 @@
             ++parseContext.statementNestingLevel;
         }
     }
-#line 11630 "MachineIndependent/glslang_tab.cpp"
+#line 11688 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 622: /* function_definition: function_prototype $@13 compound_statement_no_new_scope  */
-#line 4080 "MachineIndependent/glslang.y"
+  case 625: /* function_definition: function_prototype $@13 compound_statement_no_new_scope  */
+#line 4105 "MachineIndependent/glslang.y"
                                     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -11657,228 +11715,228 @@
             --parseContext.statementNestingLevel;
         }
     }
-#line 11661 "MachineIndependent/glslang_tab.cpp"
+#line 11719 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 623: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
-#line 4110 "MachineIndependent/glslang.y"
+  case 626: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
+#line 4135 "MachineIndependent/glslang.y"
                                                                            {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
     }
-#line 11669 "MachineIndependent/glslang_tab.cpp"
+#line 11727 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 624: /* attribute_list: single_attribute  */
-#line 4115 "MachineIndependent/glslang.y"
+  case 627: /* attribute_list: single_attribute  */
+#line 4140 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 11677 "MachineIndependent/glslang_tab.cpp"
+#line 11735 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 625: /* attribute_list: attribute_list COMMA single_attribute  */
-#line 4118 "MachineIndependent/glslang.y"
+  case 628: /* attribute_list: attribute_list COMMA single_attribute  */
+#line 4143 "MachineIndependent/glslang.y"
                                             {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 11685 "MachineIndependent/glslang_tab.cpp"
+#line 11743 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 626: /* single_attribute: IDENTIFIER  */
-#line 4123 "MachineIndependent/glslang.y"
+  case 629: /* single_attribute: IDENTIFIER  */
+#line 4148 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 11693 "MachineIndependent/glslang_tab.cpp"
+#line 11751 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 627: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
-#line 4126 "MachineIndependent/glslang.y"
+  case 630: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
+#line 4151 "MachineIndependent/glslang.y"
                                                             {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 11701 "MachineIndependent/glslang_tab.cpp"
+#line 11759 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 628: /* spirv_requirements_list: spirv_requirements_parameter  */
-#line 4133 "MachineIndependent/glslang.y"
+  case 631: /* spirv_requirements_list: spirv_requirements_parameter  */
+#line 4158 "MachineIndependent/glslang.y"
                                    {
         (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq);
     }
-#line 11709 "MachineIndependent/glslang_tab.cpp"
+#line 11767 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 629: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
-#line 4136 "MachineIndependent/glslang.y"
+  case 632: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
+#line 4161 "MachineIndependent/glslang.y"
                                                                  {
         (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq));
     }
-#line 11717 "MachineIndependent/glslang_tab.cpp"
+#line 11775 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 630: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
-#line 4141 "MachineIndependent/glslang.y"
+  case 633: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
+#line 4166 "MachineIndependent/glslang.y"
                                                                        {
         (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr);
     }
-#line 11725 "MachineIndependent/glslang_tab.cpp"
+#line 11783 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 631: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
-#line 4144 "MachineIndependent/glslang.y"
+  case 634: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
+#line 4169 "MachineIndependent/glslang.y"
                                                                         {
         (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 11733 "MachineIndependent/glslang_tab.cpp"
+#line 11791 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 632: /* spirv_extension_list: STRING_LITERAL  */
-#line 4149 "MachineIndependent/glslang.y"
+  case 635: /* spirv_extension_list: STRING_LITERAL  */
+#line 4174 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 11741 "MachineIndependent/glslang_tab.cpp"
+#line 11799 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 633: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
-#line 4152 "MachineIndependent/glslang.y"
+  case 636: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
+#line 4177 "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 11749 "MachineIndependent/glslang_tab.cpp"
+#line 11807 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 634: /* spirv_capability_list: INTCONSTANT  */
-#line 4157 "MachineIndependent/glslang.y"
+  case 637: /* spirv_capability_list: INTCONSTANT  */
+#line 4182 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
     }
-#line 11757 "MachineIndependent/glslang_tab.cpp"
+#line 11815 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 635: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
-#line 4160 "MachineIndependent/glslang.y"
+  case 638: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
+#line 4185 "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 11765 "MachineIndependent/glslang_tab.cpp"
+#line 11823 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 636: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4165 "MachineIndependent/glslang.y"
+  case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4190 "MachineIndependent/glslang.y"
                                                               {
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
         (yyval.interm.intermNode) = 0;
     }
-#line 11774 "MachineIndependent/glslang_tab.cpp"
+#line 11832 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 637: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4169 "MachineIndependent/glslang.y"
+  case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4194 "MachineIndependent/glslang.y"
                                                                                             {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
         (yyval.interm.intermNode) = 0;
     }
-#line 11784 "MachineIndependent/glslang_tab.cpp"
+#line 11842 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 638: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
-#line 4174 "MachineIndependent/glslang.y"
+  case 641: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
+#line 4199 "MachineIndependent/glslang.y"
                                                                                                         {
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11793 "MachineIndependent/glslang_tab.cpp"
+#line 11851 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
-#line 4178 "MachineIndependent/glslang.y"
+  case 642: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
+#line 4203 "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 11803 "MachineIndependent/glslang_tab.cpp"
+#line 11861 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
-#line 4183 "MachineIndependent/glslang.y"
+  case 643: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
+#line 4208 "MachineIndependent/glslang.y"
                                                                                                               {
         parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11812 "MachineIndependent/glslang_tab.cpp"
+#line 11870 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 641: /* 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 4187 "MachineIndependent/glslang.y"
+  case 644: /* 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 4212 "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 11822 "MachineIndependent/glslang_tab.cpp"
+#line 11880 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 642: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
-#line 4194 "MachineIndependent/glslang.y"
+  case 645: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
+#line 4219 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
     }
-#line 11830 "MachineIndependent/glslang_tab.cpp"
+#line 11888 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 643: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
-#line 4197 "MachineIndependent/glslang.y"
+  case 646: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
+#line 4222 "MachineIndependent/glslang.y"
                                                                                {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 11838 "MachineIndependent/glslang_tab.cpp"
+#line 11896 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 644: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
-#line 4202 "MachineIndependent/glslang.y"
+  case 647: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
+#line 4227 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 11846 "MachineIndependent/glslang_tab.cpp"
+#line 11904 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 645: /* spirv_execution_mode_parameter: INTCONSTANT  */
-#line 4205 "MachineIndependent/glslang.y"
+  case 648: /* spirv_execution_mode_parameter: INTCONSTANT  */
+#line 4230 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 11854 "MachineIndependent/glslang_tab.cpp"
+#line 11912 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 646: /* spirv_execution_mode_parameter: UINTCONSTANT  */
-#line 4208 "MachineIndependent/glslang.y"
+  case 649: /* spirv_execution_mode_parameter: UINTCONSTANT  */
+#line 4233 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 11862 "MachineIndependent/glslang_tab.cpp"
+#line 11920 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 647: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
-#line 4211 "MachineIndependent/glslang.y"
+  case 650: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
+#line 4236 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 11870 "MachineIndependent/glslang_tab.cpp"
+#line 11928 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 648: /* spirv_execution_mode_parameter: STRING_LITERAL  */
-#line 4214 "MachineIndependent/glslang.y"
+  case 651: /* spirv_execution_mode_parameter: STRING_LITERAL  */
+#line 4239 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 11878 "MachineIndependent/glslang_tab.cpp"
+#line 11936 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 649: /* spirv_execution_mode_id_parameter_list: constant_expression  */
-#line 4219 "MachineIndependent/glslang.y"
+  case 652: /* spirv_execution_mode_id_parameter_list: constant_expression  */
+#line 4244 "MachineIndependent/glslang.y"
                           {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -11888,11 +11946,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 11892 "MachineIndependent/glslang_tab.cpp"
+#line 11950 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 650: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
-#line 4228 "MachineIndependent/glslang.y"
+  case 653: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
+#line 4253 "MachineIndependent/glslang.y"
                                                                        {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -11902,156 +11960,156 @@
             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 11906 "MachineIndependent/glslang_tab.cpp"
+#line 11964 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 651: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4239 "MachineIndependent/glslang.y"
+  case 654: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4264 "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 11916 "MachineIndependent/glslang_tab.cpp"
+#line 11974 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 652: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4244 "MachineIndependent/glslang.y"
+  case 655: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4269 "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 11927 "MachineIndependent/glslang_tab.cpp"
+#line 11985 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 653: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4252 "MachineIndependent/glslang.y"
+  case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4277 "MachineIndependent/glslang.y"
                                                        {
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
     }
-#line 11936 "MachineIndependent/glslang_tab.cpp"
+#line 11994 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 654: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4256 "MachineIndependent/glslang.y"
+  case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4281 "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 11946 "MachineIndependent/glslang_tab.cpp"
+#line 12004 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 655: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
-#line 4261 "MachineIndependent/glslang.y"
+  case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
+#line 4286 "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 11955 "MachineIndependent/glslang_tab.cpp"
+#line 12013 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
-#line 4265 "MachineIndependent/glslang.y"
+  case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
+#line 4290 "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 11965 "MachineIndependent/glslang_tab.cpp"
+#line 12023 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
-#line 4270 "MachineIndependent/glslang.y"
+  case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
+#line 4295 "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 11974 "MachineIndependent/glslang_tab.cpp"
+#line 12032 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
-#line 4274 "MachineIndependent/glslang.y"
+  case 661: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
+#line 4299 "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 11984 "MachineIndependent/glslang_tab.cpp"
+#line 12042 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
-#line 4279 "MachineIndependent/glslang.y"
+  case 662: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
+#line 4304 "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 11993 "MachineIndependent/glslang_tab.cpp"
+#line 12051 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
-#line 4283 "MachineIndependent/glslang.y"
+  case 663: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
+#line 4308 "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 12003 "MachineIndependent/glslang_tab.cpp"
+#line 12061 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 661: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
-#line 4290 "MachineIndependent/glslang.y"
+  case 664: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
+#line 4315 "MachineIndependent/glslang.y"
                                {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
     }
-#line 12011 "MachineIndependent/glslang_tab.cpp"
+#line 12069 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 662: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
-#line 4293 "MachineIndependent/glslang.y"
+  case 665: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
+#line 4318 "MachineIndependent/glslang.y"
                                                                    {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 12019 "MachineIndependent/glslang_tab.cpp"
+#line 12077 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 663: /* spirv_decorate_parameter: FLOATCONSTANT  */
-#line 4298 "MachineIndependent/glslang.y"
+  case 666: /* spirv_decorate_parameter: FLOATCONSTANT  */
+#line 4323 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 12027 "MachineIndependent/glslang_tab.cpp"
+#line 12085 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 664: /* spirv_decorate_parameter: INTCONSTANT  */
-#line 4301 "MachineIndependent/glslang.y"
+  case 667: /* spirv_decorate_parameter: INTCONSTANT  */
+#line 4326 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 12035 "MachineIndependent/glslang_tab.cpp"
+#line 12093 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 665: /* spirv_decorate_parameter: UINTCONSTANT  */
-#line 4304 "MachineIndependent/glslang.y"
+  case 668: /* spirv_decorate_parameter: UINTCONSTANT  */
+#line 4329 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 12043 "MachineIndependent/glslang_tab.cpp"
+#line 12101 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 666: /* spirv_decorate_parameter: BOOLCONSTANT  */
-#line 4307 "MachineIndependent/glslang.y"
+  case 669: /* spirv_decorate_parameter: BOOLCONSTANT  */
+#line 4332 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 12051 "MachineIndependent/glslang_tab.cpp"
+#line 12109 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 667: /* spirv_decorate_id_parameter_list: constant_expression  */
-#line 4312 "MachineIndependent/glslang.y"
+  case 670: /* spirv_decorate_id_parameter_list: constant_expression  */
+#line 4337 "MachineIndependent/glslang.y"
                           {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -12060,11 +12118,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 12064 "MachineIndependent/glslang_tab.cpp"
+#line 12122 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 668: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression  */
-#line 4320 "MachineIndependent/glslang.y"
+  case 671: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression  */
+#line 4345 "MachineIndependent/glslang.y"
                                                                  {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -12073,139 +12131,139 @@
             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 12135 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 669: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
-#line 4330 "MachineIndependent/glslang.y"
+  case 672: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
+#line 4355 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(
             parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 12086 "MachineIndependent/glslang_tab.cpp"
+#line 12144 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 670: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
-#line 4334 "MachineIndependent/glslang.y"
+  case 673: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
+#line 4359 "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 12094 "MachineIndependent/glslang_tab.cpp"
+#line 12152 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 671: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
-#line 4339 "MachineIndependent/glslang.y"
+  case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
+#line 4364 "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 12103 "MachineIndependent/glslang_tab.cpp"
+#line 12161 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 672: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
-#line 4343 "MachineIndependent/glslang.y"
+  case 675: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
+#line 4368 "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 12113 "MachineIndependent/glslang_tab.cpp"
+#line 12171 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 673: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4348 "MachineIndependent/glslang.y"
+  case 676: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4373 "MachineIndependent/glslang.y"
                                                                          {
         (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
     }
-#line 12122 "MachineIndependent/glslang_tab.cpp"
+#line 12180 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4352 "MachineIndependent/glslang.y"
+  case 677: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4377 "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 12132 "MachineIndependent/glslang_tab.cpp"
+#line 12190 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 675: /* spirv_type_parameter_list: spirv_type_parameter  */
-#line 4359 "MachineIndependent/glslang.y"
+  case 678: /* spirv_type_parameter_list: spirv_type_parameter  */
+#line 4384 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams);
     }
-#line 12140 "MachineIndependent/glslang_tab.cpp"
+#line 12198 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 676: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
-#line 4362 "MachineIndependent/glslang.y"
+  case 679: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
+#line 4387 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams));
     }
-#line 12148 "MachineIndependent/glslang_tab.cpp"
+#line 12206 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 677: /* spirv_type_parameter: constant_expression  */
-#line 4367 "MachineIndependent/glslang.y"
+  case 680: /* spirv_type_parameter: constant_expression  */
+#line 4392 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion());
     }
-#line 12156 "MachineIndependent/glslang_tab.cpp"
+#line 12214 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 678: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4372 "MachineIndependent/glslang.y"
+  case 681: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4397 "MachineIndependent/glslang.y"
                                                                                 {
         (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
-#line 12164 "MachineIndependent/glslang_tab.cpp"
+#line 12222 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4375 "MachineIndependent/glslang.y"
+  case 682: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4400 "MachineIndependent/glslang.y"
                                                                                                               {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
-#line 12173 "MachineIndependent/glslang_tab.cpp"
+#line 12231 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 680: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
-#line 4381 "MachineIndependent/glslang.y"
+  case 683: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
+#line 4406 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst);
     }
-#line 12181 "MachineIndependent/glslang_tab.cpp"
+#line 12239 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
-#line 4384 "MachineIndependent/glslang.y"
+  case 684: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
+#line 4409 "MachineIndependent/glslang.y"
                                                                             {
         (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst));
     }
-#line 12189 "MachineIndependent/glslang_tab.cpp"
+#line 12247 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 682: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
-#line 4389 "MachineIndependent/glslang.y"
+  case 685: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
+#line 4414 "MachineIndependent/glslang.y"
                                       {
         (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string);
     }
-#line 12197 "MachineIndependent/glslang_tab.cpp"
+#line 12255 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
-#line 4392 "MachineIndependent/glslang.y"
+  case 686: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
+#line 4417 "MachineIndependent/glslang.y"
                                    {
         (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i);
     }
-#line 12205 "MachineIndependent/glslang_tab.cpp"
+#line 12263 "MachineIndependent/glslang_tab.cpp"
     break;
 
 
-#line 12209 "MachineIndependent/glslang_tab.cpp"
+#line 12267 "MachineIndependent/glslang_tab.cpp"
 
       default: break;
     }
@@ -12430,5 +12488,5 @@
   return yyresult;
 }
 
-#line 4397 "MachineIndependent/glslang.y"
+#line 4422 "MachineIndependent/glslang.y"
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index 596a10e..18cef46 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -501,11 +501,14 @@
     SHADERCALLCOHERENT = 702,      /* SHADERCALLCOHERENT  */
     NOPERSPECTIVE = 703,           /* NOPERSPECTIVE  */
     EXPLICITINTERPAMD = 704,       /* EXPLICITINTERPAMD  */
-    PERVERTEXNV = 705,             /* PERVERTEXNV  */
-    PERPRIMITIVENV = 706,          /* PERPRIMITIVENV  */
-    PERVIEWNV = 707,               /* PERVIEWNV  */
-    PERTASKNV = 708,               /* PERTASKNV  */
-    PRECISE = 709                  /* PRECISE  */
+    PERVERTEXEXT = 705,            /* PERVERTEXEXT  */
+    PERVERTEXNV = 706,             /* PERVERTEXNV  */
+    PERPRIMITIVENV = 707,          /* PERPRIMITIVENV  */
+    PERVIEWNV = 708,               /* PERVIEWNV  */
+    PERTASKNV = 709,               /* PERTASKNV  */
+    PERPRIMITIVEEXT = 710,         /* PERPRIMITIVEEXT  */
+    TASKPAYLOADWORKGROUPEXT = 711, /* TASKPAYLOADWORKGROUPEXT  */
+    PRECISE = 712                  /* PRECISE  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -553,7 +556,7 @@
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 557 "MachineIndependent/glslang_tab.cpp.h"
+#line 560 "MachineIndependent/glslang_tab.cpp.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index a0fade1..9875561 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -48,37 +48,6 @@
 #endif
 #include <cstdint>
 
-namespace {
-
-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
-}
-
-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
-}
-
-}
 
 namespace glslang {
 
@@ -696,6 +665,8 @@
 
     case EOpConstructReference: out.debug << "Construct reference type"; break;
 
+    case EOpDeclare: out.debug << "Declare"; break;
+
 #ifndef GLSLANG_WEB
     case EOpSpirvInst: out.debug << "spirv_instruction"; break;
 #endif
@@ -723,6 +694,7 @@
 
     switch (node->getOp()) {
     case EOpSequence:      out.debug << "Sequence\n";       return true;
+    case EOpScope:         out.debug << "Scope\n";       return true;
     case EOpLinkerObjects: out.debug << "Linker Objects\n"; return true;
     case EOpComma:         out.debug << "Comma";            break;
     case EOpFunction:      out.debug << "Function Definition: " << node->getName(); break;
@@ -1099,6 +1071,8 @@
     case EOpExecuteCallableNV:                out.debug << "executeCallableNV"; break;
     case EOpExecuteCallableKHR:               out.debug << "executeCallableKHR"; break;
     case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break;
+    case EOpEmitMeshTasksEXT:                 out.debug << "EmitMeshTasksEXT"; break;
+    case EOpSetMeshOutputsEXT:                out.debug << "SetMeshOutputsEXT"; break;
 
     case EOpRayQueryInitialize:                                            out.debug << "rayQueryInitializeEXT"; break;
     case EOpRayQueryTerminate:                                             out.debug << "rayQueryTerminateEXT"; break;
@@ -1138,7 +1112,7 @@
     default: out.debug.message(EPrefixError, "Bad aggregation op");
     }
 
-    if (node->getOp() != EOpSequence && node->getOp() != EOpParameters)
+    if (node->getOp() != EOpSequence && node->getOp() != EOpScope && node->getOp() != EOpParameters)
         out.debug << " (" << node->getCompleteString() << ")";
 
     out.debug << "\n";
@@ -1553,12 +1527,12 @@
             infoSink.debug << "interlock ordering = " << TQualifier::getInterlockOrderingString(interlockOrdering) << "\n";
         break;
 
-    case EShLangMeshNV:
+    case EShLangMesh:
         infoSink.debug << "max_vertices = " << vertices << "\n";
         infoSink.debug << "max_primitives = " << primitives << "\n";
         infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n";
         // Fall through
-    case EShLangTaskNV:
+    case EShLangTask:
         // Fall through
     case EShLangCompute:
         infoSink.debug << "local_size = (" << localSize[0] << ", " << localSize[1] << ", " << localSize[2] << ")\n";
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 19eabdf..4250e92 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -203,11 +203,7 @@
 
     inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey) {
         TVarEntryInfo& ent = entKey.second;
-        ent.newLocation = -1;
-        ent.newComponent = -1;
-        ent.newBinding = -1;
-        ent.newSet = -1;
-        ent.newIndex = -1;
+        ent.clearNewAssignments();
         const bool isValid = resolver.validateBinding(stage, ent);
         if (isValid) {
             resolver.resolveSet(ent.stage, ent);
@@ -281,11 +277,7 @@
     inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey)
     {
         TVarEntryInfo& ent = entKey.second;
-        ent.newLocation = -1;
-        ent.newComponent = -1;
-        ent.newBinding = -1;
-        ent.newSet = -1;
-        ent.newIndex = -1;
+        ent.clearNewAssignments();
         const bool isValid = resolver.validateInOut(ent.stage, ent);
         if (isValid) {
             resolver.resolveInOutLocation(stage, ent);
@@ -514,6 +506,24 @@
                         return;
                     }
                     else {
+                        // Deal with input/output pairs where one is a block member but the other is loose,
+                        // e.g. with ARB_separate_shader_objects
+                        if (type1.getBasicType() == EbtBlock &&
+                            type1.isStruct() && !type2.isStruct()) {
+                            // Iterate through block members tracking layout
+                            glslang::TString name;
+                            type1.getStruct()->begin()->type->appendMangledName(name);
+                            if (name == mangleName2
+                                && type1.getQualifier().layoutLocation == type2.getQualifier().layoutLocation) return;
+                        }
+                        if (type2.getBasicType() == EbtBlock &&
+                            type2.isStruct() && !type1.isStruct()) {
+                            // Iterate through block members tracking layout
+                            glslang::TString name;
+                            type2.getStruct()->begin()->type->appendMangledName(name);
+                            if (name == mangleName1
+                                && type1.getQualifier().layoutLocation == type2.getQualifier().layoutLocation) return;
+                        }
                         TString err = "Invalid In/Out variable type : " + entKey.first;
                         infoSink.info.message(EPrefixInternalError, err.c_str());
                         hadError = true;
@@ -827,7 +837,7 @@
     }
     // no locations added if already present, a built-in variable, a block, or an opaque
     if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock ||
-        type.isAtomic() || (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) {
+        type.isAtomic() || type.isSpirvType() || (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) {
         return ent.newLocation = -1;
     }
     // no locations on blocks of built-in variables
@@ -855,8 +865,8 @@
         return ent.newLocation = -1;
     }
 
-    // no locations added if already present, or a built-in variable
-    if (type.getQualifier().hasLocation() || type.isBuiltIn()) {
+    // 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()) {
         return ent.newLocation = -1;
     }
 
@@ -942,8 +952,8 @@
     if (type.getQualifier().hasLocation()) {
         return ent.newLocation = type.getQualifier().layoutLocation;
     }
-    // no locations added if already present, or a built-in variable
-    if (type.isBuiltIn()) {
+    // no locations added if already present, a built-in variable, or a variable with SPIR-V decorate
+    if (type.isBuiltIn() || type.getQualifier().hasSprivDecorate()) {
         return ent.newLocation = -1;
     }
     // no locations on blocks of built-in variables
@@ -1024,7 +1034,8 @@
     } else {
         // no locations added if already present, a built-in variable, a block, or an opaque
         if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock ||
-            type.isAtomic() || (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) {
+            type.isAtomic() || type.isSpirvType() ||
+            (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) {
             return ent.newLocation = -1;
         }
         // no locations on blocks of built-in variables
@@ -1651,6 +1662,10 @@
                     if (size <= int(autoPushConstantMaxSize)) {
                         qualifier.setBlockStorage(EbsPushConstant);
                         qualifier.layoutPacking = autoPushConstantBlockPacking;
+                        // Push constants don't have set/binding etc. decorations, remove those.
+                        qualifier.layoutSet = TQualifier::layoutSetEnd;
+                        at->second.clearNewAssignments();
+
                         upgraded = true;
                     }
                 }
@@ -1658,10 +1673,14 @@
             // If it's been upgraded to push_constant, then remove it from the uniformVector
             // so it doesn't get a set/binding assigned to it.
             if (upgraded) {
-                auto at = std::find_if(uniformVector.begin(), uniformVector.end(),
-                                       [this](const TVarLivePair& p) { return p.first == autoPushConstantBlockName; });
-                if (at != uniformVector.end())
-                    uniformVector.erase(at);
+                while (1) {
+                    auto at = std::find_if(uniformVector.begin(), uniformVector.end(),
+                                           [this](const TVarLivePair& p) { return p.first == autoPushConstantBlockName; });
+                    if (at != uniformVector.end())
+                        uniformVector.erase(at);
+                    else
+                        break;
+                }
             }
         }
         for (size_t stage = 0; stage < EShLangCount; stage++) {
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index c43864e..ba7bc3b 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -61,6 +61,15 @@
     int newComponent;
     int newIndex;
     EShLanguage stage;
+
+    void clearNewAssignments() {
+        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; }
     };
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index b1adfc9..acc512f 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -55,22 +55,28 @@
 //
 // Link-time error emitter.
 //
-void TIntermediate::error(TInfoSink& infoSink, const char* message)
+void TIntermediate::error(TInfoSink& infoSink, const char* message, EShLanguage unitStage)
 {
 #ifndef GLSLANG_WEB
     infoSink.info.prefix(EPrefixError);
-    infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+    if (unitStage < EShLangCount)
+        infoSink.info << "Linking " << StageName(getStage()) << " and " << StageName(unitStage) << " stages: " << message << "\n";
+    else
+        infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
 #endif
 
     ++numErrors;
 }
 
 // Link-time warning.
-void TIntermediate::warn(TInfoSink& infoSink, const char* message)
+void TIntermediate::warn(TInfoSink& infoSink, const char* message, EShLanguage unitStage)
 {
 #ifndef GLSLANG_WEB
     infoSink.info.prefix(EPrefixWarning);
-    infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+    if (unitStage < EShLangCount)
+        infoSink.info << "Linking " << StageName(language) << " and " << StageName(unitStage) << " stages: " << message << "\n";
+    else
+        infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
 #endif
 }
 
@@ -114,7 +120,7 @@
 }
 
 //
-// do error checking on the shader boundary in / out vars 
+// do error checking on the shader boundary in / out vars
 //
 void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) {
     if (unit.treeRoot == nullptr || treeRoot == nullptr)
@@ -206,7 +212,7 @@
     if (vertices == TQualifier::layoutNotSet)
         vertices = unit.vertices;
     else if (unit.vertices != TQualifier::layoutNotSet && vertices != unit.vertices) {
-        if (language == EShLangGeometry || language == EShLangMeshNV)
+        if (language == EShLangGeometry || language == EShLangMesh)
             error(infoSink, "Contradictory layout max_vertices values");
         else if (language == EShLangTessControl)
             error(infoSink, "Contradictory layout vertices values");
@@ -216,7 +222,7 @@
     if (primitives == TQualifier::layoutNotSet)
         primitives = unit.primitives;
     else if (primitives != unit.primitives) {
-        if (language == EShLangMeshNV)
+        if (language == EShLangMesh)
             error(infoSink, "Contradictory layout max_primitives values");
         else
             assert(0);
@@ -312,6 +318,8 @@
     MERGE_TRUE(autoMapBindings);
     MERGE_TRUE(autoMapLocations);
     MERGE_TRUE(invertY);
+    MERGE_TRUE(dxPositionW);
+    MERGE_TRUE(debugInfo);
     MERGE_TRUE(flattenUniformArrays);
     MERGE_TRUE(useUnknownFormat);
     MERGE_TRUE(hlslOffsets);
@@ -579,9 +587,6 @@
 }
 
 void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unit) {
-    if (block->getType() == unitBlock->getType()) {
-        return;
-    }
 
     if (block->getType().getTypeName() != unitBlock->getType().getTypeName() ||
         block->getType().getBasicType() != unitBlock->getType().getBasicType() ||
@@ -628,44 +633,42 @@
         }
     }
 
-    TType unitType;
-    unitType.shallowCopy(unitBlock->getType());
-
     // update symbol node in unit tree,
     // and other nodes that may reference it
     class TMergeBlockTraverser : public TIntermTraverser {
     public:
-        TMergeBlockTraverser(const glslang::TType &type, const glslang::TType& unitType,
-                             glslang::TIntermediate& unit,
-                             const std::map<unsigned int, unsigned int>& memberIdxUpdates) :
-            newType(type), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates)
-        { }
-        virtual ~TMergeBlockTraverser() { }
+        TMergeBlockTraverser(const TIntermSymbol* newSym)
+            : newSymbol(newSym), newType(nullptr), unit(nullptr), memberIndexUpdates(nullptr)
+        {
+        }
+        TMergeBlockTraverser(const TIntermSymbol* newSym, const glslang::TType* unitType, glslang::TIntermediate* unit,
+                             const std::map<unsigned int, unsigned int>* memberIdxUpdates)
+            : TIntermTraverser(false, true), newSymbol(newSym), newType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates)
+        {
+        }
+        virtual ~TMergeBlockTraverser() {}
 
-        const glslang::TType& newType;          // type with modifications
-        const glslang::TType& unitType;         // copy of original type
-        glslang::TIntermediate& unit;           // intermediate that is being updated
-        const std::map<unsigned int, unsigned int>& memberIndexUpdates;
+        const TIntermSymbol* newSymbol;
+        const glslang::TType* newType; // shallow copy of the new type
+        glslang::TIntermediate* unit;   // intermediate that is being updated
+        const std::map<unsigned int, unsigned int>* memberIndexUpdates;
 
         virtual void visitSymbol(TIntermSymbol* symbol)
         {
-            glslang::TType& symType = symbol->getWritableType();
-
-            if (symType == unitType) {
-                // each symbol node has a local copy of the unitType
-                //  if merging involves changing properties that aren't shared objects
-                //  they should be updated in all instances
-
-                // e.g. the struct list is a ptr to an object, so it can be updated
-                // once, outside the traverser
-                //*symType.getWritableStruct() = *newType.getStruct();
+            if (newSymbol->getAccessName() == symbol->getAccessName() &&
+                newSymbol->getQualifier().getBlockStorage() == symbol->getQualifier().getBlockStorage()) {
+                // Each symbol node may have a local copy of the block structure.
+                // Update those structures to match the new one post-merge
+                *(symbol->getWritableType().getWritableStruct()) = *(newSymbol->getType().getStruct());
             }
-
         }
 
         virtual bool visitBinary(TVisit, glslang::TIntermBinary* node)
         {
-            if (node->getOp() == EOpIndexDirectStruct && node->getLeft()->getType() == unitType) {
+            if (!unit || !newType || !memberIndexUpdates || memberIndexUpdates->empty())
+                return true;
+
+            if (node->getOp() == EOpIndexDirectStruct && node->getLeft()->getType() == *newType) {
                 // this is a dereference to a member of the block since the
                 // member list changed, need to update this to point to the
                 // right index
@@ -673,8 +676,8 @@
 
                 glslang::TIntermConstantUnion* constNode = node->getRight()->getAsConstantUnion();
                 unsigned int memberIdx = constNode->getConstArray()[0].getUConst();
-                unsigned int newIdx = memberIndexUpdates.at(memberIdx);
-                TIntermTyped* newConstNode = unit.addConstantUnion(newIdx, node->getRight()->getLoc());
+                unsigned int newIdx = memberIndexUpdates->at(memberIdx);
+                TIntermTyped* newConstNode = unit->addConstantUnion(newIdx, node->getRight()->getLoc());
 
                 node->setRight(newConstNode);
                 delete constNode;
@@ -683,10 +686,20 @@
             }
             return true;
         }
-    } finalLinkTraverser(block->getType(), unitType, *unit, memberIndexUpdates);
+    };
 
-    // update the tree to use the new type
-    unit->getTreeRoot()->traverse(&finalLinkTraverser);
+    // 'this' may have symbols that are using the old block structure, so traverse the tree to update those
+    // in 'visitSymbol'
+    TMergeBlockTraverser finalLinkTraverser(block);
+    getTreeRoot()->traverse(&finalLinkTraverser);
+
+    // The 'unit' intermediate needs the block structures update, but also structure entry indices
+    // may have changed from the old block to the new one that it was merged into, so update those
+    // in 'visitBinary'
+    TType newType;
+    newType.shallowCopy(block->getType());
+    TMergeBlockTraverser unitFinalLinkTraverser(block, &newType, unit, &memberIndexUpdates);
+    unit->getTreeRoot()->traverse(&unitFinalLinkTraverser);
 
     // update the member list
     (*unitMemberList) = (*memberList);
@@ -759,7 +772,10 @@
 
                     auto checkName = [this, unitSymbol, &infoSink](const TString& name) {
                         for (unsigned int i = 0; i < unitSymbol->getType().getStruct()->size(); ++i) {
-                            if (name == (*unitSymbol->getType().getStruct())[i].type->getFieldName()) {
+                            if (name == (*unitSymbol->getType().getStruct())[i].type->getFieldName()
+                                && !((*unitSymbol->getType().getStruct())[i].type->getQualifier().hasLocation()
+                                    || unitSymbol->getType().getQualifier().hasLocation())
+                                ) {
                                 error(infoSink, "Anonymous member name used for global variable or other anonymous member: ");
                                 infoSink.info << (*unitSymbol->getType().getStruct())[i].type->getCompleteString() << "\n";
                             }
@@ -815,6 +831,10 @@
 #if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
     bool crossStage = getStage() != unitStage;
     bool writeTypeComparison = false;
+    bool errorReported = false;
+    bool printQualifiers = false;
+    bool printPrecision = false;
+    bool printType = false;
 
     // Types have to match
     {
@@ -846,11 +866,48 @@
                 (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray()));
         }
 
-        if (!symbol.getType().sameElementType(unitSymbol.getType()) ||
-            !symbol.getType().sameTypeParameters(unitSymbol.getType()) ||
-            !arraysMatch ) {
+        int lpidx = -1;
+        int rpidx = -1;
+        if (!symbol.getType().sameElementType(unitSymbol.getType(), &lpidx, &rpidx)) {
+            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: \""
+                              << (*symbol.getType().getStruct())[lpidx].type->getCompleteString(true, false, false, true,
+                                      (*symbol.getType().getStruct())[lpidx].type->getFieldName()) << "\"\n";
+                infoSink.info << "        " << StageName(unitStage) << " stage: \""
+                              << (*unitSymbol.getType().getStruct())[rpidx].type->getCompleteString(true, false, false, true,
+                                      (*unitSymbol.getType().getStruct())[rpidx].type->getFieldName()) << "\"\n";
+                errorReported = true;
+            } else if (lpidx >= 0 && rpidx == -1) {
+                  TString errmsg = StageName(getStage());
+                  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: "
+                    << (*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:");
+                  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";
+                  errorReported = true;
+            } else {
+                  error(infoSink, "Types must match:", unitStage);
+                  writeTypeComparison = true;
+                  printType = true;
+            }
+        } else if (!arraysMatch) {
+            error(infoSink, "Array sizes must be compatible:", unitStage);
             writeTypeComparison = true;
-            error(infoSink, "Types must match:");
+            printType = true;
+        } else if (!symbol.getType().sameTypeParameters(unitSymbol.getType())) {
+            error(infoSink, "Type parameters must match:", unitStage);
+            writeTypeComparison = true;
+            printType = true;
         }
     }
 
@@ -871,13 +928,35 @@
             }
             const TQualifier& qualifier = (*symbol.getType().getStruct())[li].type->getQualifier();
             const TQualifier & unitQualifier = (*unitSymbol.getType().getStruct())[ri].type->getQualifier();
-            if (qualifier.layoutMatrix     != unitQualifier.layoutMatrix ||
-                qualifier.layoutOffset     != unitQualifier.layoutOffset ||
-                qualifier.layoutAlign      != unitQualifier.layoutAlign ||
-                qualifier.layoutLocation   != unitQualifier.layoutLocation ||
-                qualifier.layoutComponent  != unitQualifier.layoutComponent) {
-                error(infoSink, "Interface block member layout qualifiers must match:");
-                writeTypeComparison = true;
+            bool layoutQualifierError = false;
+            if (qualifier.layoutMatrix != unitQualifier.layoutMatrix) {
+                error(infoSink, "Interface block member layout matrix qualifier must match:", unitStage);
+                layoutQualifierError = true;
+            }
+            if (qualifier.layoutOffset != unitQualifier.layoutOffset) {
+                error(infoSink, "Interface block member layout offset qualifier must match:", unitStage);
+                layoutQualifierError = true;
+            }
+            if (qualifier.layoutAlign != unitQualifier.layoutAlign) {
+                error(infoSink, "Interface block member layout align qualifier must match:", unitStage);
+                layoutQualifierError = true;
+            }
+            if (qualifier.layoutLocation != unitQualifier.layoutLocation) {
+                error(infoSink, "Interface block member layout location qualifier must match:", unitStage);
+                layoutQualifierError = true;
+            }
+            if (qualifier.layoutComponent != unitQualifier.layoutComponent) {
+                error(infoSink, "Interface block member layout component qualifier must match:", unitStage);
+                layoutQualifierError = true;
+            }
+            if (layoutQualifierError) {
+                infoSink.info << "    " << StageName(getStage()) << " 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: "
+                              << (*unitSymbol.getType().getStruct())[ri].type->getFieldName() << " \""
+                              << (*unitSymbol.getType().getStruct())[ri].type->getCompleteString(true, true, false, false) << "\"\n";
+                errorReported = true;
             }
             ++li;
             ++ri;
@@ -891,8 +970,9 @@
     // Qualifiers have to (almost) match
     // Storage...
     if (!isInOut && symbol.getQualifier().storage != unitSymbol.getQualifier().storage) {
-        error(infoSink, "Storage qualifiers must match:");
+        error(infoSink, "Storage qualifiers must match:", unitStage);
         writeTypeComparison = true;
+        printQualifiers = true;
     }
 
     // Uniform and buffer blocks must either both have an instance name, or
@@ -900,37 +980,40 @@
     if (symbol.getQualifier().isUniformOrBuffer() &&
         (IsAnonymous(symbol.getName()) != IsAnonymous(unitSymbol.getName()))) {
         error(infoSink, "Matched Uniform or Storage blocks must all be anonymous,"
-                        " or all be named:");
+                        " or all be named:", unitStage);
         writeTypeComparison = true;
     }
 
     if (symbol.getQualifier().storage == unitSymbol.getQualifier().storage &&
         (IsAnonymous(symbol.getName()) != IsAnonymous(unitSymbol.getName()) ||
          (!IsAnonymous(symbol.getName()) && symbol.getName() != unitSymbol.getName()))) {
-        warn(infoSink, "Matched shader interfaces are using different instance names.");
+        warn(infoSink, "Matched shader interfaces are using different instance names.", unitStage);
         writeTypeComparison = true;
     }
 
     // Precision...
     if (!isInOut && symbol.getQualifier().precision != unitSymbol.getQualifier().precision) {
-        error(infoSink, "Precision qualifiers must match:");
+        error(infoSink, "Precision qualifiers must match:", unitStage);
         writeTypeComparison = true;
+        printPrecision = true;
     }
 
     // Invariance...
     if (! crossStage && symbol.getQualifier().invariant != unitSymbol.getQualifier().invariant) {
-        error(infoSink, "Presence of invariant qualifier must match:");
+        error(infoSink, "Presence of invariant qualifier must match:", unitStage);
         writeTypeComparison = true;
+        printQualifiers = true;
     }
 
     // Precise...
     if (! crossStage && symbol.getQualifier().isNoContraction() != unitSymbol.getQualifier().isNoContraction()) {
-        error(infoSink, "Presence of precise qualifier must match:");
+        error(infoSink, "Presence of precise qualifier must match:", unitStage);
         writeTypeComparison = true;
+        printPrecision = true;
     }
 
     // Auxiliary and interpolation...
-    // "interpolation qualification (e.g., flat) and auxiliary qualification (e.g. centroid) may differ.  
+    // "interpolation qualification (e.g., flat) and auxiliary qualification (e.g. centroid) may differ.
     //  These mismatches are allowed between any pair of stages ...
     //  those provided in the fragment shader supersede those provided in previous stages."
     if (!crossStage &&
@@ -940,57 +1023,137 @@
         symbol.getQualifier().isSample()!= unitSymbol.getQualifier().isSample() ||
         symbol.getQualifier().isPatch() != unitSymbol.getQualifier().isPatch() ||
         symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective())) {
-        error(infoSink, "Interpolation and auxiliary storage qualifiers must match:");
+        error(infoSink, "Interpolation and auxiliary storage qualifiers must match:", unitStage);
         writeTypeComparison = true;
+        printQualifiers = true;
     }
 
     // Memory...
-    if (symbol.getQualifier().coherent          != unitSymbol.getQualifier().coherent ||
-        symbol.getQualifier().devicecoherent    != unitSymbol.getQualifier().devicecoherent ||
-        symbol.getQualifier().queuefamilycoherent  != unitSymbol.getQualifier().queuefamilycoherent ||
-        symbol.getQualifier().workgroupcoherent != unitSymbol.getQualifier().workgroupcoherent ||
-        symbol.getQualifier().subgroupcoherent  != unitSymbol.getQualifier().subgroupcoherent ||
-        symbol.getQualifier().shadercallcoherent!= unitSymbol.getQualifier().shadercallcoherent ||
-        symbol.getQualifier().nonprivate        != unitSymbol.getQualifier().nonprivate ||
-        symbol.getQualifier().volatil           != unitSymbol.getQualifier().volatil ||
-        symbol.getQualifier().restrict          != unitSymbol.getQualifier().restrict ||
-        symbol.getQualifier().readonly          != unitSymbol.getQualifier().readonly ||
-        symbol.getQualifier().writeonly         != unitSymbol.getQualifier().writeonly) {
-        error(infoSink, "Memory qualifiers must match:");
-        writeTypeComparison = true;
+    bool memoryQualifierError = false;
+    if (symbol.getQualifier().coherent != unitSymbol.getQualifier().coherent) {
+        error(infoSink, "Memory coherent qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().devicecoherent != unitSymbol.getQualifier().devicecoherent) {
+        error(infoSink, "Memory devicecoherent qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().queuefamilycoherent != unitSymbol.getQualifier().queuefamilycoherent) {
+        error(infoSink, "Memory queuefamilycoherent qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().workgroupcoherent != unitSymbol.getQualifier().workgroupcoherent) {
+        error(infoSink, "Memory workgroupcoherent qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().subgroupcoherent != unitSymbol.getQualifier().subgroupcoherent) {
+        error(infoSink, "Memory subgroupcoherent qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().shadercallcoherent != unitSymbol.getQualifier().shadercallcoherent) {
+        error(infoSink, "Memory shadercallcoherent qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().nonprivate != unitSymbol.getQualifier().nonprivate) {
+        error(infoSink, "Memory nonprivate qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().volatil != unitSymbol.getQualifier().volatil) {
+        error(infoSink, "Memory volatil qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().restrict != unitSymbol.getQualifier().restrict) {
+        error(infoSink, "Memory restrict qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().readonly != unitSymbol.getQualifier().readonly) {
+        error(infoSink, "Memory readonly qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (symbol.getQualifier().writeonly != unitSymbol.getQualifier().writeonly) {
+        error(infoSink, "Memory writeonly qualifier must match:", unitStage);
+        memoryQualifierError = true;
+    }
+    if (memoryQualifierError) {
+          writeTypeComparison = true;
+          printQualifiers = true;
     }
 
     // Layouts...
     // TODO: 4.4 enhanced layouts: Generalize to include offset/align: current spec
     //       requires separate user-supplied offset from actual computed offset, but
     //       current implementation only has one offset.
-    if (symbol.getQualifier().layoutMatrix    != unitSymbol.getQualifier().layoutMatrix ||
-        symbol.getQualifier().layoutPacking   != unitSymbol.getQualifier().layoutPacking ||
-        (symbol.getQualifier().hasLocation() && unitSymbol.getQualifier().hasLocation() && symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation) ||
-        symbol.getQualifier().layoutComponent != unitSymbol.getQualifier().layoutComponent ||
-        symbol.getQualifier().layoutIndex     != unitSymbol.getQualifier().layoutIndex ||
-        (symbol.getQualifier().hasBinding() && unitSymbol.getQualifier().hasBinding() && symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding) ||
-        (symbol.getQualifier().hasBinding() && (symbol.getQualifier().layoutOffset != unitSymbol.getQualifier().layoutOffset))) {
-        error(infoSink, "Layout qualification must match:");
+    bool layoutQualifierError = false;
+    if (symbol.getQualifier().layoutMatrix != unitSymbol.getQualifier().layoutMatrix) {
+        error(infoSink, "Layout matrix qualifier must match:", unitStage);
+        layoutQualifierError = true;
+    }
+    if (symbol.getQualifier().layoutPacking != unitSymbol.getQualifier().layoutPacking) {
+        error(infoSink, "Layout packing qualifier must match:", unitStage);
+        layoutQualifierError = true;
+    }
+    if (symbol.getQualifier().hasLocation() && unitSymbol.getQualifier().hasLocation() && symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation) {
+        error(infoSink, "Layout location qualifier must match:", unitStage);
+        layoutQualifierError = true;
+    }
+    if (symbol.getQualifier().layoutComponent != unitSymbol.getQualifier().layoutComponent) {
+        error(infoSink, "Layout component qualifier must match:", unitStage);
+        layoutQualifierError = true;
+    }
+    if (symbol.getQualifier().layoutIndex != unitSymbol.getQualifier().layoutIndex) {
+        error(infoSink, "Layout index qualifier must match:", unitStage);
+        layoutQualifierError = true;
+    }
+    if (symbol.getQualifier().hasBinding() && unitSymbol.getQualifier().hasBinding() && symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding) {
+        error(infoSink, "Layout binding qualifier must match:", unitStage);
+        layoutQualifierError = true;
+    }
+    if (symbol.getQualifier().hasBinding() && (symbol.getQualifier().layoutOffset != unitSymbol.getQualifier().layoutOffset)) {
+        error(infoSink, "Layout offset qualifier must match:", unitStage);
+        layoutQualifierError = true;
+    }
+    if (layoutQualifierError) {
         writeTypeComparison = true;
+        printQualifiers = true;
     }
 
     // Initializers have to match, if both are present, and if we don't already know the types don't match
-    if (! writeTypeComparison) {
+    if (! writeTypeComparison && ! errorReported) {
         if (! symbol.getConstArray().empty() && ! unitSymbol.getConstArray().empty()) {
             if (symbol.getConstArray() != unitSymbol.getConstArray()) {
-                error(infoSink, "Initializers must match:");
+                error(infoSink, "Initializers must match:", unitStage);
                 infoSink.info << "    " << symbol.getName() << "\n";
             }
         }
     }
 
     if (writeTypeComparison) {
-        infoSink.info << "    " << symbol.getName() << ": \"" << symbol.getType().getCompleteString() << "\" versus ";
-        if (symbol.getName() != unitSymbol.getName())
-            infoSink.info << unitSymbol.getName() << ": ";
-
-        infoSink.info << "\"" << unitSymbol.getType().getCompleteString() << "\"\n";
+        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,
+                                                    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()
+              << ": \"" << 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: \""
+              << 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() << " \""
+              << symbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n";
+            infoSink.info << "    " << StageName(unitStage) << " stage: " << unitSymbol.getName() << " \""
+              << unitSymbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n";
+          }
+        }
     }
 #endif
 }
@@ -1132,8 +1295,8 @@
             error(infoSink, "At least one shader must specify a layout(max_vertices = value)");
         break;
     case EShLangFragment:
-        // for GL_ARB_post_depth_coverage, EarlyFragmentTest is set automatically in 
-        // ParseHelper.cpp. So if we reach here, this must be GL_EXT_post_depth_coverage 
+        // for GL_ARB_post_depth_coverage, EarlyFragmentTest is set automatically in
+        // ParseHelper.cpp. So if we reach here, this must be GL_EXT_post_depth_coverage
         // requiring explicit early_fragment_tests
         if (getPostDepthCoverage() && !getEarlyFragmentTests())
             error(infoSink, "post_depth_coverage requires early_fragment_tests");
@@ -1150,7 +1313,7 @@
         if (numShaderRecordBlocks > 1)
             error(infoSink, "Only one shaderRecordNV buffer block is allowed per stage");
         break;
-    case EShLangMeshNV:
+    case EShLangMesh:
         // NV_mesh_shader doesn't allow use of both single-view and per-view builtins.
         if (inIoAccessed("gl_Position") && inIoAccessed("gl_PositionPerViewNV"))
             error(infoSink, "Can only use one of gl_Position or gl_PositionPerViewNV");
@@ -1169,9 +1332,11 @@
         if (primitives == TQualifier::layoutNotSet)
             error(infoSink, "At least one shader must specify a layout(max_primitives = value)");
         // fall through
-    case EShLangTaskNV:
+    case EShLangTask:
         if (numTaskNVBlocks > 1)
             error(infoSink, "Only one taskNV interface block is allowed per shader");
+        if (numTaskEXTPayloads > 1)
+            error(infoSink, "Only single variable of type taskPayloadSharedEXT is allowed per shader");
         sharedBlockCheck(infoSink);
         break;
     default:
@@ -1798,7 +1963,7 @@
         return size;
     }
 
-    int numComponents;
+    int numComponents {0};
     if (type.isScalar())
         numComponents = 1;
     else if (type.isVector())
@@ -2064,7 +2229,7 @@
 
     if (type.isVector()) {
         int scalarAlign = getBaseAlignmentScalar(type, size);
-        
+
         size *= type.getVectorSize();
         return scalarAlign;
     }
@@ -2085,7 +2250,7 @@
 
     assert(0);  // all cases should be covered above
     size = 1;
-    return 1;    
+    return 1;
 }
 
 int TIntermediate::getMemberAlignment(const TType& type, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor)
@@ -2175,8 +2340,8 @@
                 ! type.getQualifier().patch) ||
             (language == EShLangTessEvaluation && type.getQualifier().storage == EvqVaryingIn) ||
             (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
-                type.getQualifier().pervertexNV) ||
-            (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut &&
+             (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) ||
+            (language == EShLangMesh && type.getQualifier().storage == EvqVaryingOut &&
                 !type.getQualifier().perTaskNV));
 }
 #endif // not GLSLANG_WEB
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 6aa9399..e7a171c 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -290,10 +290,14 @@
         resources(TBuiltInResource{}),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
         invertY(false),
+        dxPositionW(false),
+        enhancedMsgs(false),
+        debugInfo(false),
         useStorageBuffer(false),
         invariantAll(false),
         nanMinMaxClamp(false),
         depthReplacing(false),
+        stencilReplacing(false),
         uniqueId(0),
         globalUniformBlockName(""),
         atomicCounterBlockName(""),
@@ -307,9 +311,9 @@
         useVulkanMemoryModel(false),
         invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet),
         inputPrimitive(ElgNone), outputPrimitive(ElgNone),
-        pixelCenterInteger(false), originUpperLeft(false),
+        pixelCenterInteger(false), originUpperLeft(false),texCoordBuiltinRedeclared(false),
         vertexSpacing(EvsNone), vertexOrder(EvoNone), interlockOrdering(EioNone), pointMode(false), earlyFragmentTests(false),
-        postDepthCoverage(false), depthLayout(EldNone),
+        postDepthCoverage(false), earlyAndLateFragmentTestsAMD(false), depthLayout(EldNone), stencilLayout(ElsNone),
         hlslFunctionality1(false),
         blendEquations(0), xfbMode(false), multiStream(false),
         layoutOverrideCoverage(false),
@@ -319,6 +323,7 @@
         primitives(TQualifier::layoutNotSet),
         numTaskNVBlocks(0),
         layoutPrimitiveCulling(false),
+        numTaskEXTPayloads(0),
         autoMapBindings(false),
         autoMapLocations(false),
         flattenUniformArrays(false),
@@ -397,6 +402,9 @@
         case EShTargetSpv_1_5:
             processes.addProcess("target-env spirv1.5");
             break;
+        case EShTargetSpv_1_6:
+            processes.addProcess("target-env spirv1.6");
+            break;
         default:
             processes.addProcess("target-env spirvUnknown");
             break;
@@ -415,6 +423,9 @@
         case EShTargetVulkan_1_2:
             processes.addProcess("target-env vulkan1.2");
             break;
+        case EShTargetVulkan_1_3:
+            processes.addProcess("target-env vulkan1.3");
+            break;
         default:
             processes.addProcess("target-env vulkanUnknown");
             break;
@@ -452,6 +463,12 @@
     const std::string& getEntryPointName() const { return entryPointName; }
     const std::string& getEntryPointMangledName() const { return entryPointMangledName; }
 
+    void setDebugInfo(bool debuginfo)
+    {
+        debugInfo = debuginfo;
+    }
+    bool getDebugInfo() const { return debugInfo; }
+
     void setInvertY(bool invert)
     {
         invertY = invert;
@@ -460,6 +477,20 @@
     }
     bool getInvertY() const { return invertY; }
 
+    void setDxPositionW(bool dxPosW)
+    {
+        dxPositionW = dxPosW;
+        if (dxPositionW)
+            processes.addProcess("dx-position-w");
+    }
+    bool getDxPositionW() const { return dxPositionW; }
+
+    void setEnhancedMsgs()
+    {
+        enhancedMsgs = true;
+    }
+    bool getEnhancedMsgs() const { return enhancedMsgs && getSource() == EShSourceGlsl; }
+
 #ifdef ENABLE_HLSL
     void setSource(EShSource s) { source = s; }
     EShSource getSource() const { return source; }
@@ -565,6 +596,8 @@
     bool isInvariantAll() const { return invariantAll; }
     void setDepthReplacing() { depthReplacing = true; }
     bool isDepthReplacing() const { return depthReplacing; }
+    void setStencilReplacing() { stencilReplacing = true; }
+    bool isStencilReplacing() const { return stencilReplacing; }
     bool setLocalSize(int dim, int size)
     {
         if (localSizeNotDefault[dim])
@@ -614,6 +647,7 @@
     int getNumPushConstants() const { return 0; }
     void addShaderRecordCount() { }
     void addTaskNVCount() { }
+    void addTaskPayloadEXTCount() { }
     void setUseVulkanMemoryModel() { }
     bool usingVulkanMemoryModel() const { return false; }
     bool usingPhysicalStorageBuffer() const { return false; }
@@ -731,6 +765,7 @@
     int getNumPushConstants() const { return numPushConstants; }
     void addShaderRecordCount() { ++numShaderRecordBlocks; }
     void addTaskNVCount() { ++numTaskNVBlocks; }
+    void addTaskPayloadEXTCount() { ++numTaskEXTPayloads; }
 
     bool setInvocations(int i)
     {
@@ -799,7 +834,9 @@
     void setPostDepthCoverage() { postDepthCoverage = true; }
     bool getPostDepthCoverage() const { return postDepthCoverage; }
     void setEarlyFragmentTests() { earlyFragmentTests = true; }
+    void setEarlyAndLateFragmentTestsAMD() { earlyAndLateFragmentTestsAMD = true; }
     bool getEarlyFragmentTests() const { return earlyFragmentTests; }
+    bool getEarlyAndLateFragmentTestsAMD() const { return earlyAndLateFragmentTestsAMD; }
     bool setDepth(TLayoutDepth d)
     {
         if (depthLayout != EldNone)
@@ -807,11 +844,21 @@
         depthLayout = d;
         return true;
     }
+    bool setStencil(TLayoutStencil s)
+    {
+        if (stencilLayout != ElsNone)
+            return stencilLayout == s;
+        stencilLayout = s;
+        return true;
+    }
     TLayoutDepth getDepth() const { return depthLayout; }
+    TLayoutStencil getStencil() const { return stencilLayout; }
     void setOriginUpperLeft() { originUpperLeft = true; }
     bool getOriginUpperLeft() const { return originUpperLeft; }
     void setPixelCenterInteger() { pixelCenterInteger = true; }
     bool getPixelCenterInteger() const { return pixelCenterInteger; }
+    void setTexCoordRedeclared() { texCoordBuiltinRedeclared = true; }
+    bool getTexCoordRedeclared() const { return texCoordBuiltinRedeclared; }
     void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); }
     unsigned int getBlendEquations() const { return blendEquations; }
     bool setXfbBufferStride(int buffer, unsigned stride)
@@ -1016,8 +1063,8 @@
 
 protected:
     TIntermSymbol* addSymbol(long long Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
-    void error(TInfoSink& infoSink, const char*);
-    void warn(TInfoSink& infoSink, const char*);
+    void error(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount);
+    void warn(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount);
     void mergeCallGraphs(TInfoSink&, TIntermediate&);
     void mergeModes(TInfoSink&, TIntermediate&);
     void mergeTrees(TInfoSink&, TIntermediate&);
@@ -1070,10 +1117,14 @@
     int numPushConstants;
     bool recursive;
     bool invertY;
+    bool dxPositionW;
+    bool enhancedMsgs;
+    bool debugInfo;
     bool useStorageBuffer;
     bool invariantAll;
     bool nanMinMaxClamp;            // true if desiring min/max/clamp to favor non-NaN over NaN
     bool depthReplacing;
+    bool stencilReplacing;
     int localSize[3];
     bool localSizeNotDefault[3];
     int localSizeSpecId[3];
@@ -1098,13 +1149,16 @@
     TLayoutGeometry outputPrimitive;
     bool pixelCenterInteger;
     bool originUpperLeft;
+    bool texCoordBuiltinRedeclared;
     TVertexSpacing vertexSpacing;
     TVertexOrder vertexOrder;
     TInterlockOrdering interlockOrdering;
     bool pointMode;
     bool earlyFragmentTests;
     bool postDepthCoverage;
+    bool earlyAndLateFragmentTestsAMD;
     TLayoutDepth depthLayout;
+    TLayoutStencil stencilLayout;
     bool hlslFunctionality1;
     int blendEquations;        // an 'or'ing of masks of shifts of TBlendEquationShift
     bool xfbMode;
@@ -1117,6 +1171,7 @@
     int primitives;
     int numTaskNVBlocks;
     bool layoutPrimitiveCulling;
+    int numTaskEXTPayloads;
 
     // Base shift values
     std::array<unsigned int, EResCount> shiftBinding;
@@ -1158,6 +1213,7 @@
                                             // for callableData/callableDataIn
     // set of names of statically read/written I/O that might need extra checking
     std::set<TString> ioAccessed;
+
     // source code of shader, useful as part of debug information
     std::string sourceFile;
     std::string sourceText;
diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
index d521da1..16eb939 100644
--- a/glslang/OSDependent/Unix/CMakeLists.txt
+++ b/glslang/OSDependent/Unix/CMakeLists.txt
@@ -52,8 +52,18 @@
     target_link_libraries(OSDependent Threads::Threads)
 endif()
 
-if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent EXPORT OSDependentTargets
-            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-	install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+if(ENABLE_GLSLANG_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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp
index 81da99c..b98df93 100644
--- a/glslang/OSDependent/Unix/ossource.cpp
+++ b/glslang/OSDependent/Unix/ossource.cpp
@@ -57,52 +57,6 @@
 //
 
 //
-// Wrapper for Linux call to DetachThread.  This is required as pthread_cleanup_push() expects
-// the cleanup routine to return void.
-//
-static void DetachThreadLinux(void *)
-{
-    DetachThread();
-}
-
-//
-// Registers cleanup handler, sets cancel type and state, and executes the thread specific
-// cleanup handler.  This function will be called in the Standalone.cpp for regression
-// testing.  When OpenGL applications are run with the driver code, Linux OS does the
-// thread cleanup.
-//
-void OS_CleanupThreadData(void)
-{
-#if defined(__ANDROID__) || defined(__Fuchsia__)
-    DetachThreadLinux(NULL);
-#else
-    int old_cancel_state, old_cancel_type;
-    void *cleanupArg = NULL;
-
-    //
-    // Set thread cancel state and push cleanup handler.
-    //
-    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old_cancel_state);
-    pthread_cleanup_push(DetachThreadLinux, (void *) cleanupArg);
-
-    //
-    // Put the thread in deferred cancellation mode.
-    //
-    pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &old_cancel_type);
-
-    //
-    // Pop cleanup handler and execute it prior to unregistering the cleanup handler.
-    //
-    pthread_cleanup_pop(1);
-
-    //
-    // Restore the thread's previous cancellation mode.
-    //
-    pthread_setcanceltype(old_cancel_state, NULL);
-#endif
-}
-
-//
 // Thread Local Storage Operations
 //
 inline OS_TLSIndex PthreadKeyToTLSIndex(pthread_key_t key)
diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt
index 21d603e..6048bb8 100644
--- a/glslang/OSDependent/Windows/CMakeLists.txt
+++ b/glslang/OSDependent/Windows/CMakeLists.txt
@@ -48,7 +48,17 @@
 endif()
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent EXPORT OSDependentTargets
-            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-	install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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/osinclude.h b/glslang/OSDependent/osinclude.h
index 218abe4..fcfeff2 100644
--- a/glslang/OSDependent/osinclude.h
+++ b/glslang/OSDependent/osinclude.h
@@ -54,8 +54,6 @@
 
 typedef unsigned int (*TThreadEntrypoint)(void*);
 
-void OS_CleanupThreadData(void);
-
 void OS_DumpMemoryCounters();
 
 } // end namespace glslang
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index d2a4bf4..78dd323 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -108,8 +108,10 @@
     EShLangMissNV = EShLangMiss,
     EShLangCallable,
     EShLangCallableNV = EShLangCallable,
-    EShLangTaskNV,
-    EShLangMeshNV,
+    EShLangTask,
+    EShLangTaskNV = EShLangTask,
+    EShLangMesh,
+    EShLangMeshNV = EShLangMesh,
     LAST_ELEMENT_MARKER(EShLangCount),
 } EShLanguage;         // would be better as stage, but this is ancient now
 
@@ -132,8 +134,10 @@
     EShLangMissNVMask         = EShLangMissMask,
     EShLangCallableMask       = (1 << EShLangCallable),
     EShLangCallableNVMask     = EShLangCallableMask,
-    EShLangTaskNVMask         = (1 << EShLangTaskNV),
-    EShLangMeshNVMask         = (1 << EShLangMeshNV),
+    EShLangTaskMask           = (1 << EShLangTask),
+    EShLangTaskNVMask         = EShLangTaskMask,
+    EShLangMeshMask           = (1 << EShLangMesh),
+    EShLangMeshNVMask         = EShLangMeshMask,
     LAST_ELEMENT_MARKER(EShLanguageMaskCount),
 } EShLanguageMask;
 
@@ -150,8 +154,8 @@
 
 typedef enum {
     EShClientNone,               // use when there is no client, e.g. for validation
-    EShClientVulkan,
-    EShClientOpenGL,
+    EShClientVulkan,             // as GLSL dialect, specifies KHR_vulkan_glsl extension
+    EShClientOpenGL,             // as GLSL dialect, specifies ARB_gl_spirv extension
     LAST_ELEMENT_MARKER(EShClientCount),
 } EShClient;
 
@@ -166,8 +170,9 @@
     EShTargetVulkan_1_0 = (1 << 22),                  // Vulkan 1.0
     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
     EShTargetOpenGL_450 = 450,                        // OpenGL
-    LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 4),
+    LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 5),
 } EShTargetClientVersion;
 
 typedef EShTargetClientVersion EshTargetClientVersion;
@@ -179,7 +184,8 @@
     EShTargetSpv_1_3 = (1 << 16) | (3 << 8),          // SPIR-V 1.3
     EShTargetSpv_1_4 = (1 << 16) | (4 << 8),          // SPIR-V 1.4
     EShTargetSpv_1_5 = (1 << 16) | (5 << 8),          // SPIR-V 1.5
-    LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 6),
+    EShTargetSpv_1_6 = (1 << 16) | (6 << 8),          // SPIR-V 1.6
+    LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 7),
 } EShTargetLanguageVersion;
 
 struct TInputLanguage {
@@ -262,6 +268,7 @@
     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
     LAST_ELEMENT_MARKER(EShMsgCount),
 };
 
@@ -298,7 +305,7 @@
 
 //
 // ShHandle held by but opaque to the driver.  It is allocated,
-// managed, and de-allocated by the compiler/linker. It's contents
+// managed, and de-allocated by the compiler/linker. Its contents
 // are defined by and used by the compiler and linker.  For example,
 // symbol table information and object code passed from the compiler
 // to the linker can be stored where ShHandle points.
@@ -468,6 +475,8 @@
     GLSLANG_EXPORT void setSourceEntryPoint(const char* sourceEntryPointName);
     GLSLANG_EXPORT void addProcesses(const std::vector<std::string>&);
     GLSLANG_EXPORT void setUniqueId(unsigned long long id);
+    GLSLANG_EXPORT void setOverrideVersion(int version);
+    GLSLANG_EXPORT void setDebugInfo(bool debugInfo);
 
     // IO resolver binding data: see comments in ShaderLang.cpp
     GLSLANG_EXPORT void setShiftBinding(TResourceType res, unsigned int base);
@@ -485,6 +494,8 @@
     GLSLANG_EXPORT void addUniformLocationOverride(const char* name, int loc);
     GLSLANG_EXPORT void setUniformLocationBase(int base);
     GLSLANG_EXPORT void setInvertY(bool invert);
+    GLSLANG_EXPORT void setDxPositionW(bool dxPosW);
+    GLSLANG_EXPORT void setEnhancedMsgs();
 #ifdef ENABLE_HLSL
     GLSLANG_EXPORT void setHlslIoMapping(bool hlslIoMap);
     GLSLANG_EXPORT void setFlattenUniformArrays(bool flatten);
@@ -512,11 +523,14 @@
     //                 use EShClientNone and version of 0, e.g. for validation mode.
     //                 Note 'version' does not describe the target environment,
     //                 just the version of the source dialect to compile under.
+    //                 For example, to choose the Vulkan dialect of GLSL defined by
+    //                 version 100 of the KHR_vulkan_glsl extension: lang = EShSourceGlsl,
+    //                 dialect = EShClientVulkan, and version = 100.
     //
     //                 See the definitions of TEnvironment, EShSource, EShLanguage,
     //                 and EShClient for choices and more detail.
     //
-    // setEnvClient:   The client that will be hosting the execution, and it's version.
+    // setEnvClient:   The client that will be hosting the execution, and its version.
     //                 Note 'version' is not the version of the languages involved, but
     //                 the version of the client environment.
     //                 Use EShClientNone and version of 0 if there is no client, e.g.
@@ -703,6 +717,9 @@
     // a function in the source string can be renamed FROM this TO the name given in setEntryPoint.
     std::string sourceEntryPointName;
 
+    // overrides #version in shader source or default version if #version isn't present
+    int overrideVersion;
+
     TEnvironment environment;
 
     friend class TProgram;
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index f9680dd..1d97546 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -233,8 +233,10 @@
         "precise_struct_block.vert",
         "maxClipDistances.vert",
         "findFunction.frag",
+        "noMatchingFunction.frag",
         "constantUnaryConversion.comp",
         "xfbUnsizedArray.error.vert",
+        "xfbUnsizedArray.error.tese",
         "glsl.140.layoutOffset.error.vert",
         "glsl.430.layoutOffset.error.vert",
         "glsl.450.subgroup.frag",
@@ -284,9 +286,16 @@
         "textureoffset_sampler2darrayshadow.vert",
         "atomicAdd.comp",
         "GL_ARB_gpu_shader5.u2i.vert",
+        "textureQueryLOD.frag",
         "atomicCounterARBOps.vert",
         "GL_EXT_shader_integer_mix.vert",
         "GL_ARB_draw_instanced.vert",
+        "GL_ARB_fragment_coord_conventions.vert",
+        "BestMatchFunction.vert",
+        "EndStreamPrimitive.geom",
+        "floatBitsToInt.vert",
+        "coord_conventions.frag",
+        "gl_FragCoord.frag"
     })),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt
index c8f0282..8dff7ed 100644
--- a/gtests/CMakeLists.txt
+++ b/gtests/CMakeLists.txt
@@ -69,9 +69,19 @@
         set_property(TARGET glslangtests PROPERTY FOLDER tests)
         glslang_set_link_args(glslangtests)
         if(ENABLE_GLSLANG_INSTALL)
-            install(TARGETS glslangtests EXPORT glslangtestsTargets
-                    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-			install(EXPORT glslangtestsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+            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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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")
diff --git a/gtests/GlslMapIO.FromFile.cpp b/gtests/GlslMapIO.FromFile.cpp
index 574e905..aabb4ae 100644
--- a/gtests/GlslMapIO.FromFile.cpp
+++ b/gtests/GlslMapIO.FromFile.cpp
@@ -109,7 +109,52 @@
                 success &= outQualifier.layoutLocation == inQualifier.layoutLocation;
             }
             else {
-                success &= false;
+                if (!in.getType()->isStruct()) {
+                    bool found = false;
+                    for (auto outIt : pipeOut) {
+                        if (outIt.second->getType()->isStruct()) {
+                            unsigned int baseLoc = outIt.second->getType()->getQualifier().hasLocation() ?
+                                outIt.second->getType()->getQualifier().layoutLocation :
+                                std::numeric_limits<unsigned int>::max();
+                            for (size_t j = 0; j < outIt.second->getType()->getStruct()->size(); j++) {
+                                baseLoc = (*outIt.second->getType()->getStruct())[j].type->getQualifier().hasLocation() ?
+                                    (*outIt.second->getType()->getStruct())[j].type->getQualifier().layoutLocation : baseLoc;
+                                if (baseLoc != std::numeric_limits<unsigned int>::max()) {
+                                    if (baseLoc == in.getType()->getQualifier().layoutLocation) {
+                                        found = true;
+                                        break;
+                                    }
+                                    baseLoc += glslang::TIntermediate::computeTypeLocationSize(*(*outIt.second->getType()->getStruct())[j].type, EShLangVertex);
+                                }
+                            }
+                            if (found) {
+                                break;
+                            }
+                        }
+                    }
+                    success &= found;
+                }
+                else {
+                    unsigned int baseLoc = in.getType()->getQualifier().hasLocation() ? in.getType()->getQualifier().layoutLocation : -1;
+                    for (size_t j = 0; j < in.getType()->getStruct()->size(); j++) {
+                        baseLoc = (*in.getType()->getStruct())[j].type->getQualifier().hasLocation() ?
+                            (*in.getType()->getStruct())[j].type->getQualifier().layoutLocation : baseLoc;
+                        if (baseLoc != std::numeric_limits<unsigned int>::max()) {
+                            bool isMemberFound = false;
+                            for (auto outIt : pipeOut) {
+                                if (baseLoc == outIt.second->getType()->getQualifier().layoutLocation) {
+                                    isMemberFound = true;
+                                    break;
+                                }
+                            }
+                            if (!isMemberFound) {
+                                success &= false;
+                                break;
+                            }
+                            baseLoc += glslang::TIntermediate::computeTypeLocationSize(*(*in.getType()->getStruct())[j].type, EShLangVertex);
+                        }
+                    }
+                }
             }
         }
     }
@@ -295,6 +340,10 @@
     ::testing::ValuesIn(std::vector<IoMapData>({
         {{"iomap.crossStage.vert", "iomap.crossStage.frag" }, Semantics::OpenGL},
         {{"iomap.crossStage.2.vert", "iomap.crossStage.2.geom", "iomap.crossStage.2.frag" }, Semantics::OpenGL},
+        {{"iomap.blockOutVariableIn.vert", "iomap.blockOutVariableIn.frag"}, Semantics::OpenGL},
+        {{"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},
         // vulkan semantics
         {{"iomap.crossStage.vk.vert", "iomap.crossStage.vk.geom", "iomap.crossStage.vk.frag" }, Semantics::Vulkan},
     }))
@@ -303,4 +352,4 @@
 
 }  // anonymous namespace
 }  // namespace glslangtest
-#endif 
\ No newline at end of file
+#endif 
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 5e1cbda..5974257 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -59,11 +59,13 @@
 
 using HlslCompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslVulkan1_1CompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslSpv1_6CompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslLegalizeTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslDebugTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslDX9CompatibleTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslLegalDebugTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslNonSemanticShaderDebugInfoTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 
 // Compiling HLSL to pre-legalized SPIR-V under Vulkan semantics. Expected
 // to successfully generate both AST and SPIR-V.
@@ -81,6 +83,13 @@
                             Target::BothASTAndSpv, true, GetParam().entryPoint);
 }
 
+TEST_P(HlslSpv1_6CompileTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_3, glslang::EShTargetSpv_1_6,
+                            Target::BothASTAndSpv, true, GetParam().entryPoint);
+}
+
 TEST_P(HlslCompileAndFlattenTest, FromFile)
 {
     loadFileCompileFlattenUniformsAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
@@ -128,6 +137,13 @@
                             "/baseResults/", true, true);
 }
 
+TEST_P(HlslNonSemanticShaderDebugInfoTest, FromFile)
+{
+    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);
+}
+
 // clang-format off
 INSTANTIATE_TEST_SUITE_P(
     ToSpirv, HlslCompileTest,
@@ -385,6 +401,7 @@
         {"hlsl.structbuffer.fn2.comp", "main"},
         {"hlsl.structbuffer.rw.frag", "main"},
         {"hlsl.structbuffer.rwbyte.frag", "main"},
+        {"hlsl.structbuffer.rwbyte2.comp", "main"},
         {"hlsl.structin.vert", "main"},
         {"hlsl.structIoFourWay.frag", "main"},
         {"hlsl.structStructName.frag", "main"},
@@ -425,7 +442,8 @@
         {"hlsl.typedef.frag", "PixelShaderFunction"},
         {"hlsl.whileLoop.frag", "PixelShaderFunction"},
         {"hlsl.void.frag", "PixelShaderFunction"},
-        {"hlsl.type.type.conversion.all.frag", "main"}
+        {"hlsl.type.type.conversion.all.frag", "main"},
+        {"hlsl.instance.geom", "GeometryShader"}
     }),
     FileNameAsCustomTestSuffix
 );
@@ -451,6 +469,16 @@
 
 // clang-format off
 INSTANTIATE_TEST_SUITE_P(
+    ToSpirv, HlslSpv1_6CompileTest,
+    ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+       {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"}
+    }),
+    FileNameAsCustomTestSuffix
+);
+// clang-format on
+
+// clang-format off
+INSTANTIATE_TEST_SUITE_P(
     ToSpirv, HlslCompileAndFlattenTest,
     ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
         {"hlsl.array.flatten.frag", "main"},
@@ -507,7 +535,21 @@
     }),
     FileNameAsCustomTestSuffix
 );
+// clang-format on
 
+// clang-format off
+INSTANTIATE_TEST_SUITE_P(
+    ToSpirv, HlslNonSemanticShaderDebugInfoTest,
+    ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+        {"spv.debuginfo.hlsl.vert", "main"},
+        {"spv.debuginfo.hlsl.frag", "main"},
+        {"spv.debuginfo.hlsl.comp", "main"},
+        {"spv.debuginfo.hlsl.geom", "main"},
+        {"spv.debuginfo.hlsl.tesc", "main"},
+        {"spv.debuginfo.hlsl.tese", "main"},
+    }),
+    FileNameAsCustomTestSuffix
+);
 // clang-format on
 
 }  // anonymous namespace
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index ef11764..93e364d 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -69,6 +69,7 @@
 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>>;
 using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using VulkanSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 using OpenGLSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
@@ -79,6 +80,7 @@
 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>>;
 
 // Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully
 // generate SPIR-V.
@@ -122,6 +124,13 @@
                             Target::Spv);
 }
 
+TEST_P(CompileToSpirv16Test, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_3, glslang::EShTargetSpv_1_6,
+                            Target::Spv);
+}
+
 // Compiling GLSL to SPIR-V under OpenGL semantics. Expected to successfully
 // generate SPIR-V.
 TEST_P(CompileOpenGLToSpirvTest, FromFile)
@@ -221,6 +230,13 @@
                                                                      Target::Spv);
 }
 
+TEST_P(CompileVulkanToNonSemanticShaderDebugInfoTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
+                            Target::Spv, true, "", "/baseResults/", false, false, true);
+}
+
 // clang-format off
 INSTANTIATE_TEST_SUITE_P(
     Glsl, CompileVulkanToSpirvTest,
@@ -250,6 +266,7 @@
         "rayQuery-initialization.Error.comp",
         "rayQuery-global.rgen",
         "rayQuery-types.comp",
+        "rayQuery-OpConvertUToAccelerationStructureKHR.comp",
         "spv.set.vert",
         "spv.double.comp",
         "spv.100ops.frag",
@@ -365,7 +382,6 @@
         "spv.int64.frag",
         "spv.intcoopmat.comp",
         "spv.intOps.vert",
-        "spv.intrinsicsSpecConst.vert",
         "spv.intrinsicsSpirvByReference.vert",
         "spv.intrinsicsSpirvDecorate.frag",
         "spv.intrinsicsSpirvExecutionMode.frag",
@@ -373,6 +389,7 @@
         "spv.intrinsicsSpirvLiteral.vert",
         "spv.intrinsicsSpirvStorageClass.rchit",
         "spv.intrinsicsSpirvType.rgen",
+        "spv.intrinsicsSpirvTypeLocalVar.vert",
         "spv.invariantAll.vert",
         "spv.layer.tese",
         "spv.layoutNested.vert",
@@ -436,6 +453,7 @@
         "spv.textureBuffer.vert",
         "spv.image.frag",
         "spv.imageAtomic64.frag",
+        "spv.imageAtomic64.comp",
         "spv.types.frag",
         "spv.uint.frag",
         "spv.uniformArray.frag",
@@ -462,6 +480,7 @@
         "spv.storageBuffer.vert",
         "spv.terminate.frag",
         "spv.subgroupUniformControlFlow.vert",
+        "spv.subgroupSizeARB.frag",
         "spv.precise.tese",
         "spv.precise.tesc",
         "spv.viewportindex.tese",
@@ -476,7 +495,9 @@
         "spv.smBuiltins.frag",
         "spv.builtin.PrimitiveShadingRateEXT.vert",
         "spv.builtin.ShadingRateEXT.frag",
-        "spv.atomicAdd.bufferReference.comp"
+        "spv.atomicAdd.bufferReference.comp",
+        "spv.fragmentShaderBarycentric3.frag",
+        "spv.fragmentShaderBarycentric4.frag",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -520,6 +541,7 @@
         "spv.vulkan110.int16.frag",
         "spv.int32.frag",
         "spv.explicittypes.frag",
+        "spv.float16NoRelaxed.vert",
         "spv.float32.frag",
         "spv.float64.frag",
         "spv.memoryScopeSemantics.comp",
@@ -617,12 +639,37 @@
         "spv.WorkgroupMemoryExplicitLayout.std140.comp",
         "spv.WorkgroupMemoryExplicitLayout.std430.comp",
         "spv.WorkgroupMemoryExplicitLayout.scalar.comp",
+
+        // SPV_EXT_mesh_shader
+        "spv.ext.meshShaderBuiltins.mesh",
+        "spv.ext.meshShaderRedeclBuiltins.mesh",
+        "spv.ext.meshShaderTaskMem.mesh",
+        "spv.ext.meshShaderUserDefined.mesh",
+        "spv.ext.meshTaskShader.task",
+        "spv.atomiAddEXT.error.mesh",
+        "spv.atomiAddEXT.task",
+        "spv.460.subgroupEXT.task",
+        "spv.460.subgroupEXT.mesh",
     })),
     FileNameAsCustomTestSuffix
 );
 
 // clang-format off
 INSTANTIATE_TEST_SUITE_P(
+    Glsl, CompileToSpirv16Test,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.1.6.conditionalDiscard.frag",
+        "spv.1.6.helperInvocation.frag",
+        "spv.1.6.specConstant.comp",
+        "spv.1.6.samplerBuffer.frag",
+        "spv.1.6.separate.frag",
+    })),
+    FileNameAsCustomTestSuffix
+);
+
+
+// clang-format off
+INSTANTIATE_TEST_SUITE_P(
     Hlsl, HlslIoMap,
     ::testing::ValuesIn(std::vector<IoMapData>{
         { "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, 30, true, false },
@@ -785,6 +832,7 @@
 })),
 FileNameAsCustomTestSuffix
 );
+
 INSTANTIATE_TEST_SUITE_P(
     Glsl, CompileUpgradeTextureToSampledTextureAndDropSamplersTest,
     ::testing::ValuesIn(std::vector<std::string>({
@@ -792,6 +840,19 @@
     })),
     FileNameAsCustomTestSuffix
 );
+
+INSTANTIATE_TEST_SUITE_P(
+    Glsl, CompileVulkanToNonSemanticShaderDebugInfoTest,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.debuginfo.glsl.vert",
+        "spv.debuginfo.glsl.frag",
+        "spv.debuginfo.glsl.comp",
+        "spv.debuginfo.glsl.geom",
+        "spv.debuginfo.glsl.tesc",
+        "spv.debuginfo.glsl.tese"
+    })),
+    FileNameAsCustomTestSuffix
+);
 // clang-format on
 
 }  // anonymous namespace
diff --git a/gtests/TestFixture.cpp b/gtests/TestFixture.cpp
index ced6fcc..4c935f8 100644
--- a/gtests/TestFixture.cpp
+++ b/gtests/TestFixture.cpp
@@ -73,9 +73,9 @@
     } else if (stage == "rcall") {
         return EShLangCallable;
     } else if (stage == "task") {
-        return EShLangTaskNV;
+        return EShLangTask;
     } else if (stage == "mesh") {
-        return EShLangMeshNV;
+        return EShLangMesh;
     } else {
         assert(0 && "Unknown shader stage");
         return EShLangCount;
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index 2b057dc..d087d6d 100644
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -217,6 +217,7 @@
             EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep,
             bool enableOptimizer = false,
             bool enableDebug = false,
+            bool enableNonSemanticShaderDebugInfo = false,
             bool automap = true)
     {
         const EShLanguage stage = GetShaderStage(GetSuffix(shaderName));
@@ -263,6 +264,8 @@
             std::vector<uint32_t> spirv_binary;
             options().disableOptimizer = !enableOptimizer;
             options().generateDebugInfo = enableDebug;
+            options().emitNonSemanticShaderDebugInfo = enableNonSemanticShaderDebugInfo;
+            options().emitNonSemanticShaderDebugSource = enableNonSemanticShaderDebugInfo;
             glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger, &options());
 
@@ -367,11 +370,12 @@
 
         if (success && (controls & EShMsgSpvRules)) {
         spv::SpvBuildLogger logger;
+            std::vector<std::string> whiteListStrings;
             std::vector<uint32_t> spirv_binary;
             glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger, &options());
 
-            spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions);
+            spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, whiteListStrings, remapOptions);
 
             std::ostringstream disassembly_stream;
             spv::Parameterize();
@@ -394,9 +398,9 @@
     {
         if ((controls & EShMsgSpvRules)) {
             std::vector<uint32_t> spirv_binary(code); // scratch copy
+            std::vector<std::string> whiteListStrings;
+            spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, whiteListStrings, remapOptions);
 
-            spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions);
-            
             std::ostringstream disassembly_stream;
             spv::Parameterize();
             spv::Disassemble(disassembly_stream, spirv_binary);
@@ -447,7 +451,8 @@
                                  const std::string& entryPointName="",
                                  const std::string& baseDir="/baseResults/",
                                  const bool enableOptimizer = false,
-                                 const bool enableDebug = false)
+                                 const bool enableDebug = false,
+                                 const bool enableNonSemanticShaderDebugInfo = false)
     {
         const std::string inputFname = testDir + "/" + testName;
         const std::string expectedOutputFname =
@@ -463,7 +468,8 @@
         if (enableDebug)
             controls = static_cast<EShMessages>(controls | EShMsgDebugInfo);
         GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion,
-            targetLanguageVersion, false, EShTexSampTransKeep, enableOptimizer, enableDebug, automap);
+            targetLanguageVersion, false, EShTexSampTransKeep, enableOptimizer, enableDebug,
+            enableNonSemanticShaderDebugInfo, automap);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp
index 777134d..96cd3cf 100644
--- a/gtests/VkRelaxed.FromFile.cpp
+++ b/gtests/VkRelaxed.FromFile.cpp
@@ -107,8 +107,8 @@
                 auto inQualifier = in.getType()->getQualifier();
                 auto outQualifier = out->second->getType()->getQualifier();
                 success &= outQualifier.layoutLocation == inQualifier.layoutLocation;
-            }
-            else {
+            // These are not part of a matched interface. Other cases still need to be added.
+            } else if (name != "gl_FrontFacing" && name != "gl_FragCoord") {
                 success &= false;
             }
         }
@@ -293,6 +293,7 @@
     ::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.changeSet.vert", "vk.relaxed.changeSet.frag" }, { {"0"}, {"1"} } },
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
index 7d5bc15..b34df3a 100644
--- a/hlsl/CMakeLists.txt
+++ b/hlsl/CMakeLists.txt
@@ -46,14 +46,16 @@
 endif()
 
 if(ENABLE_GLSLANG_INSTALL)
-    if(BUILD_SHARED_LIBS)
-        install(TARGETS HLSL EXPORT HLSLTargets
-                ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-    else()
-        install(TARGETS HLSL EXPORT HLSLTargets
-                ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-    endif()
-	install(EXPORT HLSLTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    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_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${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/known_good.json b/known_good.json
index 96c27de..5ee36a2 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "21e3f681e2004590c7865bc8c0195a4ab8e66c88"
+      "commit" : "eb0a36633d2acf4de82588504f951ad0f2cecacb"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "814e728b30ddd0f4509233099a3ad96fd4318c07"
+      "commit" : "85a1ed200d50660786c1a88d9166e871123cce39"
     }
   ]
 }
diff --git a/license-checker.cfg b/license-checker.cfg
index 409f18e..15b8f97 100644
--- a/license-checker.cfg
+++ b/license-checker.cfg
@@ -15,6 +15,8 @@
 

                     "_config.yml",

                     ".*",

+                    ".github/workflows/*.yml",

+                    ".github/workflows/*.js",

                     "CMakeSettings.json",

                     "known_good_khr.json",

                     "known_good.json",

@@ -34,6 +36,7 @@
 

                     "SPIRV/GLSL.*.h",

                     "SPIRV/NonSemanticDebugPrintf.h",

+                    "SPIRV/NonSemanticShaderDebugInfo100.h",

                     "SPIRV/spirv.hpp"

                 ]

             }

diff --git a/update_glslang_sources.py b/update_glslang_sources.py
index 65be2f6..20f303b 100755
--- a/update_glslang_sources.py
+++ b/update_glslang_sources.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # Copyright 2017 The Glslang Authors. All rights reserved.
 #